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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
7 @9 }) P4 E$ v) y3 L2 i& p% E#define AD7606_PAR_BUSY_GPIO_BANK        5
7 D4 _& I& {: C+ I3 B) L3 }#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT6 D8 {; J0 L/ A  e3 Y  @8 R/ f

9 r* f2 `4 K0 H/ K#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.112 [$ U% Z7 j1 x
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.97 y/ Z0 Q8 M6 d8 P: F5 w* I' Q
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
3 |5 z! I% {% B+ O#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
+ E" f, }* a, }" P. e! w$ i# Y1 o- o) y# I# _5 i
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
4 [* m4 g: [; @5 c( |2 K0 H#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)1 Q" Y9 F+ n" T% \5 w* y' I
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)( k  R- ~5 p# ~, U  S) y( Y' g

2 s6 @7 t+ l8 i$ Q+ \* @: C
, v& _# v7 {: V' V; l( E+ u
, u! g- q, R* a. hstatic void ad7606_irq_setup(ad7606 *ad) {
' H5 n: i2 o8 H        Hwi_Params hwiParams;
+ O! p  N/ v8 s        Hwi_Handle myHwi;
: [) h# x% |5 k& h  B- Q0 d& B        Error_Block eb;/ {9 L+ ~2 R/ T" ^' \
9 i, W6 _$ T3 p: ]$ I# {
        Error_init(&eb);! W4 g5 e8 r. l% t
        Hwi_Params_init(&hwiParams);9 O- e. v* |* n- y8 q, p
        hwiParams.arg = (unsigned int)ad;
: B$ N( h6 j# X2 i) P: o        hwiParams.enableInt = FALSE;
- i- g! C1 }0 o# M7 ?4 `        hwiParams.eventId = SYS_INT_GPIO_B5INT;
, X. l6 j1 @6 O% Q. X- H* Y& C" Z        hwiParams.priority = 4;2 Q7 U2 H. @+ Q8 A: l
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
: D7 w8 R" a$ V6 A$ e+ y3 q, a        if (myHwi == NULL) 5 O# L' @8 [3 y& y* t8 U
        LOG_FATAL("failed to create hwi");
/ u/ w3 ]  J" S! F4 S; R  n+ m* V. Y4 N
        /* enable both interrupts */
) X# ~& {! t3 [2 {# z  H) d% v        Hwi_enableInterrupt(ad->irq_event);
" }% o/ f5 j. s4 n) `' E$ ~}, T/ d% V0 K' n# v  O) h
: u! V; y3 F# {" Y, ]( U* J4 t! Z
' z- R. P7 U- u. I/ s
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {9 B+ ~3 b$ H4 J% H( |
        volatile unsigned int savePinMux = 0;6 l/ f' \& w# L- H
        //初始化5.11、5.9 、 5.5为GPIO口1 v1 i. M6 H! P
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));, _% i" w& O1 _1 p- y4 @
" B) j! S) {4 _1 t: Z' Y
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
1 P! v9 ^) O+ k0 x/ O
# o* }& |' t$ F0 o9 J+ r9 b3 ~        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));
! x! l4 S7 C' @' ?8 N8 b. \
$ q) N  D! k! Q8 {( x; _' f! N+ C        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);& L/ I( R: B3 s% L+ H7 x; Q

$ p* g0 A. _. a) W; i% x& H. r1 q}7 o4 v! B6 n( K4 c; i8 S: ^

- o- l# N5 J3 G4 N5 ]) z  @: G
$ z" R" V( _! C7 ^0 y) }) Cstatic void ad7606_gpio_setup(ad7606 *ad) {0 E" q* }: y- n) C& C
        /*Set the AD7606_PAR_BUSY to the input mode*/" y9 i( ]( H5 H& i  |- D
        //初始化5.11、5.9 、 5.5为中断口
1 [3 x  K* u: a0 u& u6 T        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);/ o5 j" W' y4 ]
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);1 R6 W6 f' a* `, P$ _' m
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);) }9 c% N- t% R- E) O5 I5 q
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
$ Y  o' x# N$ v- t! J, W        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
$ Y0 w; b! r( B% T! s8 n        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);1 a8 d* R3 I% F/ t* i
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
" ?' U/ z3 ^4 T# r9 z4 P        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
( z! ]7 v3 t3 m0 e! K2 u1 A8 I        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);& c' @! {9 j+ h! ], i2 M% |
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
: y3 R3 o. D% _" |$ U        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);7 J' d( ^+ t1 V; f! \/ s

5 I" j- a. J5 e2 i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
# V1 N% m. Y: ~! n; |6 t  `6 y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
3 R, K2 j- Y6 L  e- y; n7 q' p        Task_sleep(1000);
6 [- u8 p; b! b/ G# s# A% B        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);' ?6 v2 U/ I; Q/ T' x2 e& p
        Task_sleep(1000);
7 a0 ^/ J- F% Z0 h$ u0 {" x4 A
- o: a3 h8 f7 O3 g3 d$ i        /*Set the AD7606_PAR_CONVST to output mode*/+ Q( U4 Y$ X* X5 l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);. Y, H7 H3 }0 O/ X, q
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);% |' [( B, P! O, p6 n- O

( s9 Z5 @5 H7 h" U/ t        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
- w8 L2 i9 o$ U6 g5 e- E1 h+ x; e* ]        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
4 C- k& ]+ m; {# T2 j6 j& }' L6 K' v9 }5 x& p/ @+ C/ _
}% i% ~0 m$ [! N8 _0 v1 s& }

" R  L9 x3 T) _) [6 V+ T
  D+ R7 p: g" r, T& ustatic void ad7606_busy_hwi(UArg ad_addr) {
! `7 t3 I1 y- Y- q2 m- G& }& G, B: V

& g. r0 P/ {! c3 J* q: P5 G( l        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
; {9 g4 ?+ S; w9 p* W2 K' U        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
3 W8 s- }1 ^* Z& Y( K# @( @
. T3 W9 c" v6 S8 v  \        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
) Q, B6 ^: @' f* |1 F        {
, \, y* b" u- ^) G% c6 ^                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。+ p+ Y. m! _3 y- V: R* C  Z
                cs_addr = SOC_EMIFA_CS5_ADDR ;
7 l8 w1 k; |$ m- N* A" g9 w& V                internal = 0 ;
  p1 A' j1 t, O# q5 y                int_flag[0] = 1 ;/ h! o( z3 a; L1 z) p0 b
        }
5 g9 G" Y6 A7 Y7 f3 O        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
: o. p' P) O, J. ]$ g4 r        {
) u, V5 y. o* c9 M2 E7 j                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。: w! L9 C4 {, w8 H
                cs_addr = SOC_EMIFA_CS4_ADDR ;
$ d; X$ w1 K' ~5 U/ }                internal = 6 ;+ _) c6 z. y, H' f% S0 s
                int_flag[1] = 1 ;2 F. ]8 o% M, g( J" d# p/ D+ N
        }+ U' u) L2 `/ C+ Y& R2 H
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
( {% Q2 `- Z" U) j  Q# l" F        {
2 v; ~" u0 z3 n0 W+ i" `                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
+ c% r1 F1 d3 _' G+ I                cs_addr = SOC_EMIFA_CS2_ADDR ;1 e& }- A, W% R3 o
                internal = 12 ;
" H1 R' e/ w# |# V& ^' ^+ z: A                int_flag[2] = 1 ;4 h' [7 L- [5 K
        }4 e) a; }3 [$ W& K) L4 Z# R
  
5 c- F) H. G# d; }        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
* d- v- M$ h* X* f       3 m- P1 }% y& `% ~  s
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
# d( B, D+ b: g# `" Z" K}
) k% D9 \9 X8 x& h
( R/ r: W0 O# s% X6 {: V' B3 {. m
* M7 U; x2 T0 h8 c8 s- y7 c' E/ ~6 K# D' Q" C, I: [' ~  q
" d2 V- F9 s6 G; K1 v% C

本帖子中包含更多资源

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

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:13 , Processed in 0.050202 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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