sysbios hwi 端口识别问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4438|回复: 1
打印 上一主题 下一主题

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:- W* G2 E; a& A5 e# b, C* l3 H
#define AD7606_PAR_BUSY_GPIO_BANK        5! D  K2 v4 w4 ], v/ ?
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT' C1 g6 |, v1 f! n# K" E

8 ?! l9 A) I7 K$ M6 N, o#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
, @8 H2 U) V, U#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
  d% |( `9 v" e8 A* V#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
5 y" a0 R% ?5 P, ]3 o7 F5 M% U#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
& K8 O+ p/ ]" [' }
* P0 E5 H) F4 N: M: D#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
0 ~# G( ?5 J0 B#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)1 q, E# [9 T) \! @
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
# `: r; H+ U. I1 u
0 B. C5 I) T1 n5 c  h  j+ F* E
  L/ ~- C- X5 }& H
$ w: B- {# J6 q' \3 }& X) ^static void ad7606_irq_setup(ad7606 *ad) {
' z2 l/ t" Z, [9 M+ E, f7 _        Hwi_Params hwiParams;: _: @3 n, C9 F. Q" m2 _
        Hwi_Handle myHwi;' u( g* E8 Y2 O& o+ ^
        Error_Block eb;
% ~( `6 E# l2 W5 r8 u' A) z, v9 R; C
        Error_init(&eb);
0 L8 j3 c$ |& f1 n0 @# f( `        Hwi_Params_init(&hwiParams);
3 U5 G5 Z6 h. A6 y& M        hwiParams.arg = (unsigned int)ad;6 y7 A2 n% E% R
        hwiParams.enableInt = FALSE;+ x1 `! Z$ ]; E7 U3 M+ @
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
. d; b% v0 v- y  H( A, U5 [: S; l6 t        hwiParams.priority = 4;
! ~% @" b9 g% Z# W! t, k" B        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
. q: G3 P5 i. p5 L0 C* ^. w        if (myHwi == NULL)
8 E, H; g* [/ o; b3 o( E3 o        LOG_FATAL("failed to create hwi");
7 d7 u$ j& F: Z* Y: H1 K
% j. l9 H2 S6 ?        /* enable both interrupts */6 ~' [  e  G  G! K5 h! n+ a( p; f
        Hwi_enableInterrupt(ad->irq_event);; D( o+ [* d/ `2 j6 P5 E
}
9 A( f* C6 @) W8 a
. E6 H( A. l; K: u; S
) V+ Q! `& b- i& A8 T7 C+ Sstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {* Z7 F2 W6 i! G% Z
        volatile unsigned int savePinMux = 0;
  S2 b$ S0 F% A        //初始化5.11、5.9 、 5.5为GPIO口
* i- K* s# `3 G0 [2 t        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
$ F# X: h2 I- m( B2 v3 N! K+ S. x/ B7 \
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
0 E: c# `* z8 M3 R, k) i! [% M7 \" C& \& o  n, ?% U
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) & (~(SYSCFG_PINMUX12_PINMUX12_31_28 | SYSCFG_PINMUX12_PINMUX12_27_24 | SYSCFG_PINMUX12_PINMUX12_23_20 | SYSCFG_PINMUX12_PINMUX12_11_8));
5 T, _3 g2 @! e
! h& s* _  ?6 D+ v4 c8 H6 }0 X        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
' c3 W  _& B' h: n( j
5 O0 l  o: k# \/ J5 Q8 O}
7 V3 m0 T# S1 [0 q& z/ H
# q3 n$ ~4 Q! J9 f- I/ R5 B; w0 c
; I" ~3 u9 c, t& f" jstatic void ad7606_gpio_setup(ad7606 *ad) {
2 u) k* l) b* f& Z/ ^* G        /*Set the AD7606_PAR_BUSY to the input mode*/
0 r5 Y# P2 n. L8 [        //初始化5.11、5.9 、 5.5为中断口
3 ]4 v  t# o7 A6 @- z6 ]$ ~        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
& d4 m, ?9 q" ^" V4 p( B- M4 r        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);" b4 \% _3 `: ~  o
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);) q7 [4 x7 T3 \& u
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
+ g$ s% U, E7 A* k$ ?. u        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/8 t5 u+ ^+ s% V5 n
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);; {! V) n9 D; y5 n, f, w! C5 P
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);  |. V+ [' ?1 l  _( `& @
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
: S& {4 ?7 C+ O, E        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
( c. Q1 G* F3 ^        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/( F9 O" o' c# I
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);( M8 W2 l  h( e
" }2 x3 w2 V- W7 W. i  D1 _' o8 Q) Y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
. A% P3 L* g( P        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
, E6 j9 [0 T& e6 F( k4 j        Task_sleep(1000);: U+ P  M3 P, [! T7 |, d
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
0 F5 ^  `4 p1 I5 F9 h2 o        Task_sleep(1000);
: J5 ?/ _. R' _' d4 i0 x/ {: `4 A, ~8 J- p- M, z& `: D1 ^
        /*Set the AD7606_PAR_CONVST to output mode*/
5 i0 S2 Z& W  [& g6 V        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);5 \. k9 O8 p. s2 w' W4 x
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);. }7 I$ M& i+ C% b& U' n% Z
) E! b0 b0 r2 b, q5 @6 H
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);1 |$ B- m' J* `
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
" ?2 X2 n; o5 T1 x
- ]# V  S2 J, E. X}
- ?# G4 L% B& y# t1 ]. {, R# ^8 C! \2 f1 V6 c) P0 D, A
' I, G, M1 X9 j. E8 Y
static void ad7606_busy_hwi(UArg ad_addr) {2 Z* ^0 S) I$ @6 g4 z" U7 e

7 \7 j9 M! q# ?4 U1 S% t. x4 G# S3 `& {* P8 D+ b% p* S
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
, d5 f5 g1 a7 F; e; F6 W        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。' D5 x" O) K4 ]5 c! m+ W2 a" g
- @1 v- O; z2 J7 p& \& U0 ~2 b) {
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)" r4 R7 u9 I" ~8 l/ q
        {1 }" r7 s% R- y# h5 N) N' R: s. J
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。0 u9 E/ G' g4 l+ N7 \/ y
                cs_addr = SOC_EMIFA_CS5_ADDR ;
% i. X( }9 U. l# C7 w                internal = 0 ;
& [8 q$ k. |6 ^- j. f* f" ?2 F+ J                int_flag[0] = 1 ;; J( P# V: F4 }/ L& ]
        }8 _; K+ y+ ]2 r& N# v. s  E
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
6 F1 I4 q9 p: q* A$ F        {5 K7 n& P: W2 A6 N+ P
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
5 M6 u+ b* H1 K' x1 @! }/ p3 p                cs_addr = SOC_EMIFA_CS4_ADDR ;: Q: y) F( K9 M: e( p9 i, Q
                internal = 6 ;; n4 W  a$ N1 g/ O5 n! ]8 o
                int_flag[1] = 1 ;1 o8 |3 I8 }6 `, {* q5 x
        }  }- @1 S+ V# X* b
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
% F) }0 [( L* P, A+ L        {
& x- n1 _- m' [' l/ Q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。+ i: d4 T( W0 o7 Z7 K
                cs_addr = SOC_EMIFA_CS2_ADDR ;% b, |7 M8 C  R/ d; D  Q
                internal = 12 ;9 s" w0 M& a; d9 N
                int_flag[2] = 1 ;
/ s8 C' F5 q. A  m2 z7 F8 F6 J        }8 }8 ^: X& W- j/ P6 A
  - f! u, Z- }" X2 [1 @9 W; Y
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);3 n4 O- K; Z0 f
       6 U) j# n7 c8 R! O  E2 a) l9 F
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
- t5 W! z3 z3 F( u}. W: x0 n2 z. B, V- m5 a$ Q' ^
  N" Q7 q8 @& Q) o; [- J

' }9 T' l) G  J4 G. @
$ e5 Y# K3 e" h0 K: A( ~5 d, n4 n% [* U# f8 b- u! U

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-9-18 19:35:35 | 只看该作者
你用单步调试,step into看看相应的函数值是否发生了变化
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-31 08:11 , Processed in 0.043593 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表