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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:7 G) p$ |& L/ q# Y# m, H) `
#define AD7606_PAR_BUSY_GPIO_BANK        58 C- a3 _& f; J* D. h. Y  Q
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
" w8 V3 b5 M8 P) H* f; K
- R+ H; M" P  t# A/ @3 y0 f$ z  A#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
9 d5 [: T$ j7 U' A, d! C#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9. s- Z# Y4 C( n/ P
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
3 E3 @$ m) `: n# F% u  D#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)/ h& }1 M+ a: R; h8 J2 E/ I+ h

3 u, y5 I6 N! e2 B#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1). S9 q# {4 I+ M0 H! S, I# h
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
( q% h2 d1 p/ L: t2 _! Q#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
) F2 P$ {1 \. k  ^2 d4 {* |2 b7 Z0 R, s5 P2 ]& ~) X

  |2 w9 T* ^& n# ^: J8 ^! x: b8 y% F$ |3 m7 ^. c, u- I
static void ad7606_irq_setup(ad7606 *ad) {
" z0 Q, p- C7 g3 m& o; \% _! B: [        Hwi_Params hwiParams;3 E, I5 V2 v$ B; d0 J% t, i
        Hwi_Handle myHwi;
7 u- y/ |! ~+ z% ]8 e        Error_Block eb;2 h: H4 B6 q6 _1 m# |

& T" B. @4 S3 ~2 j# a        Error_init(&eb);1 }5 \  B( t* m1 T/ x
        Hwi_Params_init(&hwiParams);
9 E9 L8 e1 V* L$ r0 R        hwiParams.arg = (unsigned int)ad;, Z! K  Z9 F* c$ ]8 C0 o
        hwiParams.enableInt = FALSE;4 O3 G* Z% t0 `% O1 F5 H# H9 l4 \% D
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
8 e2 _% U* b5 s9 \- l# t$ ~5 A        hwiParams.priority = 4;
, a: x2 h$ q8 q! O1 p% P        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
. U9 v) {3 |5 W        if (myHwi == NULL) 1 F2 Z6 Z& O' s1 |* w
        LOG_FATAL("failed to create hwi");. I% @2 ], E8 \, q2 Y6 a" L! j
: E( I2 h3 ?/ D( L9 G
        /* enable both interrupts */9 n7 x1 w8 [# J5 n
        Hwi_enableInterrupt(ad->irq_event);" V$ N5 \$ W# |6 X  y2 c1 r/ `" v
}8 M4 {7 T: t: c4 @5 ~
; H" F- a3 Y* s  M3 S. ^' g/ R
$ t4 n9 J6 e& G$ k
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {" [0 `6 T  v5 k' x) [1 C
        volatile unsigned int savePinMux = 0;
0 B  C' N0 l5 q) ]. x! n        //初始化5.11、5.9 、 5.5为GPIO口
5 q5 ?- E0 q7 Y3 |        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));8 v9 B( s8 v  C
- {% v+ ]0 B, v$ n, o7 I7 ~; P- W) r+ x
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);* [6 ]+ Z* J& ?* `2 z5 m4 {7 V

* _* Q6 d% Y8 }0 O' c" L) b3 l        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));$ }8 a$ P8 ]& \7 {0 l2 T' A  p

% b! O/ e8 B$ X3 T, s        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);6 Y9 L: I% z5 Q0 j9 U; E6 x" p

/ ]  w& D) N7 i# u  _}
/ h% b. _9 w5 g
, l4 d9 [7 U/ \
/ E5 a0 C  _' ?( |3 Qstatic void ad7606_gpio_setup(ad7606 *ad) {
  k! J( j. \- L        /*Set the AD7606_PAR_BUSY to the input mode*// z& s& R/ ]% h( @) V9 t& y% I
        //初始化5.11、5.9 、 5.5为中断口$ |' G+ Z! z3 O2 \/ I
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);! s* N+ [: T( U# Q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
: W' m* S; S5 I: q6 d! u5 |( V        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);' J  y' `# e4 g& X/ m( b' V
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
. e) P9 ]% c" o1 u; j        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
" m. n1 `) C* p4 x3 @        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
" G6 s0 A; V/ `+ P& I        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
( J1 V0 W, A. Q' A# P0 t9 L8 a  P) v  L        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
: ~" y) u9 M. v3 c# l        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);0 A7 M/ N/ t, M$ ~6 K
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/. F! m2 }. d  I
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
; d6 C. z( P$ G& Q0 y/ }- t
- a% T' ?% F: U& b8 |0 }        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
- @6 Y0 [: b. d" P, E        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
8 p) R; ]+ v, W, B" F* m: Q9 z        Task_sleep(1000);0 Y1 W8 `; ^0 H( ?6 A% j* b
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);% p) o" |( d9 O5 ?
        Task_sleep(1000);6 e- ^' y: u& u
+ l) _1 `" m" B" e# Y) x7 L: O
        /*Set the AD7606_PAR_CONVST to output mode*/0 K4 C" J% f  O
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);2 P: z) b% z0 v# _7 `" w5 J
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
# L( s$ G3 g0 z( ~& B4 k/ }- S, N, `$ `
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
2 M, i( ~1 k9 a        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
7 H# N: a! U( k; Y' `7 X- s& A, z. b) r1 @6 j5 @
}/ t$ l# ]- s7 s+ e$ |3 D( v
- Q1 g1 U# P& s* w

! E0 Q6 C0 w. U" Astatic void ad7606_busy_hwi(UArg ad_addr) {
) ?* F; ^' v/ A) Q
8 Q& o- `& y: ~# w' ~
1 `" H) N; ~- O6 d- m6 ~3 ?        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*// L' D! k- z# Q) U+ v, ^" q
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。. O3 d% b6 J7 K( L7 ]0 A
# D# V# c0 V7 q& v3 R+ ~7 O
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
! o& ~- x% N8 ]( M5 f" b: M        {
% V1 z. Q" n! D                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。! k5 o& R( c- y1 z
                cs_addr = SOC_EMIFA_CS5_ADDR ;
; D: |6 t6 g: M+ _2 @) K+ `                internal = 0 ;% ^/ ~* m: J" \9 n5 ?# B
                int_flag[0] = 1 ;
# V* D  n/ Z( h$ |. G        }
% u5 l& p; s" `) C        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND); z" |" `( h: x
        {9 \" ^# ?& \( }7 I8 w
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
, ~2 o$ I  v0 l1 P% L& [) ~- d                cs_addr = SOC_EMIFA_CS4_ADDR ;0 @0 c* H4 z' s* S# F$ s
                internal = 6 ;
! x( `# `4 I! }* U! r! X' J                int_flag[1] = 1 ;' f% N- u; O1 C
        }
# u, L6 w2 S1 X( B1 W        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND). z) F1 _3 j; T- Y1 d. d& |+ p
        {
* u$ R; Y+ ]: M3 u, `8 V" l, k                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。; R6 Z6 D( J9 p# N
                cs_addr = SOC_EMIFA_CS2_ADDR ;
7 z2 `8 J8 i. k9 _) j8 W( C                internal = 12 ;
$ |0 j, G2 L! L8 _                int_flag[2] = 1 ;
/ G5 W  R4 v$ t( N# c) d8 S  A( @1 c        }
2 F2 \1 Q# P; p6 w) q  
" J5 D0 i, R- R# Q# o1 n7 f# J        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);: @/ N+ l. @, U" w8 V& c
       4 N- N: \" w+ `2 e9 P
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);& C2 n2 V  I7 t0 L' U. H, x
}/ @8 q9 K* \' H) z

! p4 b# z: Z, V2 _' D
) y9 n6 l, n% g$ x# C% l" K( f& T; r; C, G' u5 D
( b# ?. ]* \: `- [5 \0 I' P

本帖子中包含更多资源

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

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-3-17 09:52 , Processed in 0.049040 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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