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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
+ ^4 V: R1 X5 I( j$ Y- P% O#define AD7606_PAR_BUSY_GPIO_BANK        5: o4 W. ]9 O- Q8 ^) M9 C
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT0 `) K/ z" N! q) S
( O7 W; ?. @- O& b- H* `
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11$ e7 I3 V: m# w1 j7 c: D. N7 B
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
2 O; m+ Y* ~- g/ U9 |) o#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
: w$ f  |4 ^+ y) s7 h#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
- ]' J) M( M! o6 e. V: K5 `
; g, J! e# _* r3 n) t: c0 V#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)5 s1 I$ {8 Q7 c
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)* J$ b) y7 ^* Q1 @( V% s# Y! I
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
! v( n, f* G6 E7 G: h0 g7 h: b! F

& \0 G8 ~. X5 X) j. p
8 e4 @: l/ b+ h& W5 g# ostatic void ad7606_irq_setup(ad7606 *ad) {
; R! m  w7 D2 j  m3 Q" y( T% O; E        Hwi_Params hwiParams;" k9 ^5 o1 U- |1 H* G2 U/ t, c' [
        Hwi_Handle myHwi;
* f& y6 _3 I" u0 {" f7 D3 I9 {        Error_Block eb;$ c4 M5 \5 Z9 u9 F/ b% ]# j2 ?

7 Q+ j9 l0 [" `1 c: C8 U        Error_init(&eb);; L4 D. B3 j8 x
        Hwi_Params_init(&hwiParams);/ T4 s, c! ?/ D9 B1 T
        hwiParams.arg = (unsigned int)ad;  L* `) X2 m# y# L8 S( z
        hwiParams.enableInt = FALSE;7 P- B: V/ Y0 `- e. r! @2 f1 h
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
5 g" ?. M' v8 T; D8 n  j  X* Q        hwiParams.priority = 4;& u" A0 `; e7 a6 w0 X, z+ Q
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数. s* }- \0 w# K5 u
        if (myHwi == NULL)
# o6 ?. n/ A6 [: q, o9 ?6 D6 [5 t        LOG_FATAL("failed to create hwi");
0 D. R- C8 S0 p# f+ g: G
' W7 l* G7 s$ F3 Y1 I- j        /* enable both interrupts */# u# _4 K1 |+ e8 l
        Hwi_enableInterrupt(ad->irq_event);
- s6 f0 V' b% d# A1 ^- k' Q4 C) G" }! h}
+ [9 P/ v0 ?' I4 r5 E: O2 K% Z( |- Q
. t7 @5 u+ H5 s
; q$ y! D  S$ s' E, l3 j; W2 u( ?static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
: E& S& t' }3 h$ j        volatile unsigned int savePinMux = 0;# q: \" v6 _4 s: [9 ?
        //初始化5.11、5.9 、 5.5为GPIO口
4 w& O$ F# h5 F* ?        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
5 i& q0 i- S4 {* d, v) F8 A( M8 ~" p( j3 p- S$ }$ o# h, w, s
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
# u; S( F5 y/ e, ]9 ~* K# m& ?/ @& t' Q! T( p; ?! t
        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));( V) l, J: j5 O2 E
& [) F& l1 U7 e! }; a$ }- p
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);" Z" q/ Z- S% b5 M+ b1 e' ^+ B

6 Q- g' N- ]! h' w2 u5 d2 I}
0 U& _: k- Z: F3 F3 P' [
# O( t3 H$ O+ S0 F1 b
' p$ p7 i: w; f; m# ^static void ad7606_gpio_setup(ad7606 *ad) {
% O2 }0 ^& R* u9 O0 ]        /*Set the AD7606_PAR_BUSY to the input mode*/
+ E  z( Y1 R: U" C        //初始化5.11、5.9 、 5.5为中断口, @5 R; f' z6 w$ n
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);9 h: a) m0 z3 G1 ^, S
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
& m$ @( L. L1 t        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);/ e; x: m2 r' y4 A0 r# X* m" N
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
* L+ ?9 ~$ c  }& ^: j5 O  s        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/' f( ?' \- v, Q* z% o/ V
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
5 u' f; M8 G' F, w        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
  ?- Y6 |% [6 s# I6 h        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
* _3 T1 F8 D1 F& p0 J$ }6 a        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);! N" S2 f& l/ j0 ~
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
8 M! P1 H0 \4 f- ?( [2 n9 X        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);  c2 w# n: y1 }

) U1 G/ N0 R4 s' m        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
& S( U$ h; N1 s. \8 b! I$ N        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
4 x1 t, G5 U+ \( i+ p$ r8 x        Task_sleep(1000);
# p6 q2 M$ u/ V5 L        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);! |8 T3 q2 S- s7 P% a8 S% T
        Task_sleep(1000);
/ {5 z9 ~  ~  o$ t6 i9 N
6 x5 p) Z2 I% f7 @5 F1 c        /*Set the AD7606_PAR_CONVST to output mode*/
: k# k: r9 E* m7 t        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
" {3 S1 K$ V/ Y3 {8 s4 m" {        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);' j: O7 W% T0 S9 h6 y) m3 D
3 T5 w: h2 Y8 {3 S9 B- m* V- M
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
" |/ c* |: e6 s! Y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
# P& @9 h- x* N0 ^( n. D3 M
! a0 g2 g' S8 d  c/ `}
5 W3 P+ E3 d2 f
, I! B: e! H4 U% U+ J/ @% k2 s6 f5 w: i( H
static void ad7606_busy_hwi(UArg ad_addr) {
0 N. w8 B; N+ z! X* S  g' d/ u0 S8 l5 I, d7 g! n, h
  E4 `/ A/ W7 k8 ]/ ]5 G
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
$ `* P) C7 ^- X$ F8 m/ ?8 `        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
( ^& d4 m: x3 J
* I# S3 ?9 U" h9 W( t1 a        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
; v* @7 S# R6 z& w* g& B8 p  n        {5 ]; e- f$ s- M7 |) S- l; c
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。# M, @$ T% {' _& S9 v+ X9 m9 f% D
                cs_addr = SOC_EMIFA_CS5_ADDR ;
5 V; I4 n. q7 c' A  m) Q2 I+ Q; d  Q                internal = 0 ;1 O! y3 V% u5 ]6 w* N8 s
                int_flag[0] = 1 ;: t* E/ l" V' _/ x1 m1 J/ l: \
        }' \7 _3 Q- H1 ~  o& {; o
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)* d, l  l% \3 D" n9 ?( h, ?/ D( m
        {
6 G/ i, y7 R$ `( y- G( [, }, V                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。1 T. m3 F- g0 ^" A* m7 M1 Y1 P; t% F
                cs_addr = SOC_EMIFA_CS4_ADDR ;
7 M2 u& T0 f  F! }                internal = 6 ;
2 q' Y' @5 t) w0 S+ R- m* m                int_flag[1] = 1 ;3 U% v* V2 j# f; ?" H; U" _
        }' K* A! w! j4 j4 g$ b3 f
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)( u/ p; ^! V0 m  P4 m: `7 R
        {
" C' F2 k$ \! Y$ M0 _* t                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
! ?8 z# Z; F' I+ [. n                cs_addr = SOC_EMIFA_CS2_ADDR ;
( r2 c0 A9 o" f. [0 V" D) Q( Z                internal = 12 ;
9 e+ A  Z% L/ [% n# s8 i- e6 g: W' z, \! l                int_flag[2] = 1 ;( N" V- ?- Z4 G) o
        }
9 |0 T; \! B* ?0 `1 q  ! t+ E) \; m5 w4 d+ }, k: ^
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);4 q7 s4 I7 Z& }
       2 D8 g! S* c% s
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
$ K6 U' F- w1 A* q& P$ p) O9 |}, G: v) t. I# R' |% i2 ?
/ D; @, B3 _$ T* P& s+ x! P# p
& E8 u' G7 A# q& Y, E/ y

, n6 c) R" R2 y( }0 E: L( a- }* h% t) Q

本帖子中包含更多资源

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

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 10:55 , Processed in 0.043696 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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