sysbios hwi 端口识别问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
( a5 }9 h1 }+ o3 F( K, @#define AD7606_PAR_BUSY_GPIO_BANK        5; Y. |" R% q, @* q) o! [8 S
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT" W$ t  f* W' d8 n) C% d5 w. q- a

# ]/ ]) ^% ?+ o) X9 v#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
5 ^  _: E4 A* z" ~6 P# b9 ?#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
7 H7 {2 v. O: g0 R8 T! k#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
( t' s- y% s7 O+ ~* |3 g& b#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)2 V+ o# y8 d* t: {
! p( x  v6 ^  h1 T4 O! _- m
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
$ _5 `6 J/ M$ l- Y/ ~: ^#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
7 A- c, x7 i3 ?7 }- D' b! Y#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)" C2 h/ e3 N+ g" M
) ~. n- D+ X% K+ }9 \% Z
1 Y. K' N- s; N4 c  c

/ m9 C+ t0 h+ A3 tstatic void ad7606_irq_setup(ad7606 *ad) {
/ {0 C4 g2 q# \0 j( x* _8 N        Hwi_Params hwiParams;
4 N) N8 H. ?) w9 a. J; U        Hwi_Handle myHwi;
* m6 h9 L$ ?" G9 A0 K2 C        Error_Block eb;
4 N& `+ g' t' x1 V- {6 @
$ A2 d2 h; t4 t; s        Error_init(&eb);+ p& y- z& @4 w& {
        Hwi_Params_init(&hwiParams);
1 W% {  Y+ V2 P: K        hwiParams.arg = (unsigned int)ad;
+ q* n/ b1 b5 @$ m( |; H        hwiParams.enableInt = FALSE;% P$ R) q2 l' v# b. T+ W0 d
        hwiParams.eventId = SYS_INT_GPIO_B5INT;7 N" z1 }  ^  J& s* J
        hwiParams.priority = 4;. ]: G$ g$ Z# q: Q
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
& y/ Q) b" U* [        if (myHwi == NULL)
8 k* y8 O  [, c! b+ Y        LOG_FATAL("failed to create hwi");: A- U& ~% k3 w/ t  [
! M: @* C8 I3 v. b# L+ t$ m* [
        /* enable both interrupts */: u! D0 i4 Z' [) G+ C
        Hwi_enableInterrupt(ad->irq_event);
6 Z5 P/ ^8 r" d' O  J}! C8 f0 l9 x5 V7 L2 I3 B% m- e7 S9 {

7 k7 m$ L: ?- d1 c$ p: ]* v+ x9 h) {, S
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
" I; B4 a! U! n# B, i# E        volatile unsigned int savePinMux = 0;( A7 A0 H  f2 y1 W
        //初始化5.11、5.9 、 5.5为GPIO口
( N% i6 j: g/ A1 B+ b* t        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
. ?; w) i! F5 e0 X# {' x
1 q0 O' N) Z9 r        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
3 ]2 Y2 Z" e( }4 n& R! e: A% w1 l/ i: x  B' u* T$ Q
        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));
  S! y# C4 G4 M6 T  X+ i' |/ F( m! I9 Y
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
- q5 Z) d3 N! A% ?$ g3 G8 _- y
( ?2 H- L  T$ D}8 e( P% z* x4 |/ w
! ~. X% d8 g" \+ K/ o  P
: q: N4 z+ `) O
static void ad7606_gpio_setup(ad7606 *ad) {% |4 y) r6 u0 D! j
        /*Set the AD7606_PAR_BUSY to the input mode*/& y) C% q( J, I( _
        //初始化5.11、5.9 、 5.5为中断口2 b$ ~. D& t" m% k
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);) U3 k6 v5 Q/ K+ [' J2 s2 n/ ^/ H
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
' [, w  ?" k5 W) a        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
7 @. p7 w0 y1 I* X* ~7 G. n3 j        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
% N9 j% Z8 @& v% f1 V        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/9 d- G$ m: ?5 P5 i& n% m# f
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);" M: X/ S. {8 s9 N1 D
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
3 h& H$ F1 m' S7 C: t        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);8 n# J4 w- ~: ~1 P( ^
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);, |8 N4 p  s. t
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
- e9 A3 k/ d' Y" ~0 I7 _; o& s- p2 @        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);" Q; [' ?* s; u% }% z6 F
9 a5 C5 O0 M, p" p) q4 d6 r2 D2 b
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
$ j5 `) j6 F" U& P& f! r: Z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
9 t9 u3 J: j) ^) F% d4 ?        Task_sleep(1000);. v# f& C$ _9 I9 p
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
" n9 {- p  N, u6 E0 n7 M        Task_sleep(1000);: k* D4 n) q9 b( [" y

8 @+ p+ A" r( s0 W        /*Set the AD7606_PAR_CONVST to output mode*/
6 j& W% I, L! `3 e        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);! s: _# ]: O8 K+ G2 P& e
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);2 t; S7 L% r0 ^0 N2 {% x
! f$ A# X( b, _6 ?; q  ~
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
* f+ j+ R; h9 A2 a" A7 d+ Z* V        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);" _+ @2 b) U$ F  O
7 y( ?2 ]! ~$ Y
}
7 C% u, K$ |7 \8 l+ W
; x& c& z+ ?0 C3 `% q: [
* X8 s$ G; }& h# Q! ?; Ystatic void ad7606_busy_hwi(UArg ad_addr) {
: i  ?1 d1 P/ F- T: C8 Z4 L  q4 P% w# j* @( D1 l* x

! F. j# E0 Z% ]% u5 a        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/  `& E1 e0 i7 b/ h: j$ R& Y
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
6 x! R4 f5 J+ u3 a( d0 R. g3 q+ M4 h. A8 N3 Q  \
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)+ Z& h' t& X% g' d- ?! Y* b  E: g
        {
, \- a  `: q) o# K                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
$ z; t3 o3 p/ `4 E7 u4 \                cs_addr = SOC_EMIFA_CS5_ADDR ;! [, E3 t) Q: ]$ j, P0 {
                internal = 0 ;& F9 S0 ?5 Y2 b3 E, r
                int_flag[0] = 1 ;
3 ]5 _* I5 `6 p& o0 r4 A        }5 e" e- v0 U: [% v" A9 g
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
% f; m; ]/ F' l# p3 j/ x4 m        {+ @/ F( h( J; r9 k9 F& G
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
" U. o% u# B! b! ^# B( I4 D                cs_addr = SOC_EMIFA_CS4_ADDR ;
. L, M* B2 d+ H3 y! m                internal = 6 ;
. x# y  `, i6 X% a4 ^. i" @; A3 T                int_flag[1] = 1 ;7 `1 Z! U( B; A. ~4 u+ u  f  H
        }: I1 V& G8 h' ^8 s6 S% m3 J
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
) q- ]$ n# C" g% |! B( Q! ?% v        {
4 K2 p* P4 j5 c5 a' O% f4 s- l- Y                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。7 b+ K) X  J4 b1 `. j3 o  J$ D
                cs_addr = SOC_EMIFA_CS2_ADDR ;
$ t' r1 t2 N0 a& C% P& L                internal = 12 ;
& L6 \) a8 j) ?                int_flag[2] = 1 ;# c$ o8 h! P( u+ H& E, R4 k) v+ h
        }
8 |# C2 ^, u% ?. K" t  
. u9 w' X8 V# I7 T" Y* [* {" k        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);3 `9 D2 f. ?  K
      
/ Z; |5 H8 P0 |! T+ Z        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);9 y* h3 o4 K/ J" S6 o9 P
}( D! n$ {1 e9 `$ I: |

* A6 z" m! x$ X
7 Z0 H" N) y: V" R% J5 I- B4 Y7 n! A: ]* S
" Y% X  l1 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, 2025-4-30 20:22 , Processed in 0.039154 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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