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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:9 o" u" E2 ~+ W2 n. j' S
#define AD7606_PAR_BUSY_GPIO_BANK        5
4 e7 s5 o6 i0 \# I) j#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT& Q9 X, D& c2 B9 @( r6 C1 |

7 e" {/ |( d, Y' g+ O4 b' ~#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11, k! d1 i+ @+ T! W. k: L+ H
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
8 C% s+ H  O# t#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5, G: a2 h8 f$ B8 x/ |( B
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
- m+ A* K7 Z- b) ]3 E( ~$ S: C
9 B9 K' Y' r! K7 K* d% P6 h4 p& @. m, o#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)7 L; D" Q7 N8 t2 k" Q% l$ l
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)( t( m: Y) T- l0 f# ^1 Y! K
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
+ s. ^, R- ]1 G+ d5 T( v& o+ ^7 l# ]# W  m0 j/ A/ f
; @  }2 O* L6 Y, p- j/ f3 j0 e6 K- T

7 \9 U! Y' }/ J. `- b$ Mstatic void ad7606_irq_setup(ad7606 *ad) {5 N: y$ w2 W4 j, K/ ?4 E
        Hwi_Params hwiParams;
6 M4 ?4 {' A( g4 x% E        Hwi_Handle myHwi;# i- `  \) p& I5 ]" x% E
        Error_Block eb;- w/ _( V$ u8 X# i) w9 ~- ~4 n5 I
# c; ~( c( N) D, i# @
        Error_init(&eb);7 `, F1 \0 w3 S6 W; C' X2 h
        Hwi_Params_init(&hwiParams);
3 ]6 t2 l+ u; |+ n2 c; k% ]        hwiParams.arg = (unsigned int)ad;
7 `9 {" g2 B4 E* I; _        hwiParams.enableInt = FALSE;
6 f- ?, F9 [* B. x        hwiParams.eventId = SYS_INT_GPIO_B5INT;2 e. j: `9 S: U+ X
        hwiParams.priority = 4;  m3 q: p4 X# u
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数( y6 G( n9 s4 @' n* M* x  Z
        if (myHwi == NULL) 6 |' {% l( u5 M! I" Q
        LOG_FATAL("failed to create hwi");8 y9 z' V1 @0 k% d( N: h
! ]. g! E7 {  }1 M
        /* enable both interrupts */
1 E, Y! X5 B. g. R, g        Hwi_enableInterrupt(ad->irq_event);
3 \7 t( T+ h9 e$ l9 n4 {9 K9 h}
- B  {8 U) a9 X# E3 I' I4 z
' n( u( E8 ^4 i8 B0 T$ F4 C) v' j7 x/ @8 K& Q7 x! h0 S7 a
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
; {  \9 m' z' z( H$ B% N, j3 c        volatile unsigned int savePinMux = 0;/ z7 X7 Q. `3 u3 ?3 \4 O9 o
        //初始化5.11、5.9 、 5.5为GPIO口
  O. `8 v4 P1 T        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
) W7 Z* _8 w8 k9 G6 m
+ ~2 l' A" i6 Y* _7 }. `' n        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);0 f; C+ f8 X, C9 p

0 G' Z% L0 i" ]+ u6 W6 p; E        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));
: \+ R1 \! R0 W  z) U
6 y- b% L2 e2 T/ w% z: n        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
5 p$ R% C, U& s
- J+ d" l* Y" F7 {}
6 L$ {( @9 H; O! R) e; C7 i% d, y3 a) t  s+ j5 `$ ~
" Z9 ^7 [- ^; Y# m2 \
static void ad7606_gpio_setup(ad7606 *ad) {/ u. z$ q0 q5 B- V# O+ B
        /*Set the AD7606_PAR_BUSY to the input mode*/
/ M' ^9 z9 T8 ?, V) o* r        //初始化5.11、5.9 、 5.5为中断口5 K+ N- |6 g" r; E3 ]
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
/ w5 z3 r! y6 N. ~3 t% d        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
7 I) _* b4 N; o0 C5 B: p        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
# {, r4 T2 r- X0 w/ Q9 l        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);. Q" j4 M: ^' \! P
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
/ f+ _6 f3 x$ c" M5 b: m& A% Y0 {        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
2 `/ {. u3 k7 C* c        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
  W* g" C1 f$ Y: a" F: q" B        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
6 r) |' y6 L; l& R9 @        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
: a4 y" H0 s3 T) e$ u. l        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/9 D: a2 I0 M( K" ?* L6 M
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
! P9 `# L! W2 z% e" ]7 P( g/ q9 A
+ _8 Z3 Q4 `1 K        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);) Q; h: c2 {: ?1 U% N
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);! l  ~5 X3 \( q% [
        Task_sleep(1000);1 X# \. r$ L' w$ Y
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
+ C/ X7 A: n3 m% \! F$ D( {( ]* f& m        Task_sleep(1000);
5 Y; U# e2 |- |' e( T% q/ B1 w
# S9 \, o+ ?" D& r* Y        /*Set the AD7606_PAR_CONVST to output mode*/
* W8 C7 N- G! }3 q" `3 _) v: e        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
4 c0 f: A* S& P" _7 B' Z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);2 [, u$ a8 o9 h6 ?$ U$ V, E; [1 s6 P

/ a8 G$ k, ^3 {* M6 {1 Y$ c, [        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
) `: @( d7 Z2 M- z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);6 \  |7 G! T$ `

" n7 `# B, h, z) \1 M7 j}( r. E$ j, {/ o6 s0 w" q

9 c$ Y1 S! g) |/ d( g7 P9 Y8 _5 V# K7 b/ Y. @5 i
static void ad7606_busy_hwi(UArg ad_addr) {
+ c4 a4 J8 I+ c. i( }& Y# J  O8 E6 [* o$ G7 }- ]" w
3 D) S7 a6 {' H7 H' O
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*// Q; [& u0 g# t* c0 s
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
3 u, f" F4 B' Y7 E3 _* ]6 Y& r, I+ v# g9 m2 ~1 M
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
& {4 u  D0 E; p- m8 r8 P& b        {. V/ J4 {' _  @. q
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。7 \9 L& [" @. g5 z
                cs_addr = SOC_EMIFA_CS5_ADDR ;
- ?- H1 a0 V8 l% }                internal = 0 ;
; m1 }* I7 o+ B3 Q" J5 K                int_flag[0] = 1 ;  m0 F% a" \2 W. c9 e/ j- V
        }9 Z* e  W+ Q8 v
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)5 T" [% a- ^& [% X+ J
        {% c1 t9 b- K' j# r* K5 ~
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。3 l6 r1 [$ V4 i* d+ x6 l
                cs_addr = SOC_EMIFA_CS4_ADDR ;
( C6 t. p: t0 [0 {; o2 x2 [                internal = 6 ;
8 t- W+ p. T+ C/ i' S; X                int_flag[1] = 1 ;# e9 l. \& ]* o: {. H
        }
( |4 b8 T. p& L# t/ A8 H6 @        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)4 n- J8 Y6 l3 A! a( V& e6 U
        {
: R+ L1 R( W5 g/ I& r8 g                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
" m  \/ n6 e4 {. g+ F3 u                cs_addr = SOC_EMIFA_CS2_ADDR ;+ Y% e! j: S* c$ `2 }; |
                internal = 12 ;* `* z7 v  E1 |5 E5 X
                int_flag[2] = 1 ;& m' \2 ]2 g8 A! U8 y3 X
        }6 A' j; r' M6 [! Y& y+ G
  1 t+ Y5 R- m; B  {, ?# K! t3 n
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);6 u0 y$ Y& ?& U+ b+ `& B" f( ~6 X
       * Y; U  H3 g1 Z4 ~& y
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);" M! d- \. F! _- d
}
. K& z! o1 \4 f" K, ~2 p) b+ B" g' c5 G. Q1 G, O% N  \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图$ N2 i/ P, e# r

6 B( b( e5 w4 ?" D6 K

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 00:21 , Processed in 0.044573 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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