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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
5 c" M; W- u8 \2 V6 ]5 X#define AD7606_PAR_BUSY_GPIO_BANK        54 b2 I0 Z3 K9 `
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT; [8 [! a; E9 x" F, G

" s; k5 ~9 B& ~+ a  n( s- \  U#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
. {8 K" _6 i3 r. M: T#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9' [" _6 n- @; u" @* g% ?7 z
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.58 I# W& B* Y' X0 d! b4 |
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
& g' q/ x  I+ R8 A5 m
: Z  @% \2 l7 |$ ^9 F6 t+ _5 w#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
3 }3 c; j2 S% b+ b) f#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2). z0 s; E' U- A# p0 q$ ]
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)/ N* h- n7 R+ L6 u4 U5 q  p$ n
: C- `5 m# ]) v9 @! P- m7 u  T

! ]- z' _4 \" ]/ o+ B2 m
/ y& F; M' q. @6 Y7 y2 Wstatic void ad7606_irq_setup(ad7606 *ad) {
5 i4 D; I, G9 O9 P        Hwi_Params hwiParams;9 }& c& B( V. K" y) A
        Hwi_Handle myHwi;) j9 r& n6 O7 R3 L
        Error_Block eb;
" }3 f' Z4 [6 K2 \' ?' k. h& x
        Error_init(&eb);# f# z. U! L  U8 A4 b, D
        Hwi_Params_init(&hwiParams);
8 K5 u) B, V/ v: U, T2 ?2 L        hwiParams.arg = (unsigned int)ad;
' _1 K3 {) k5 ^- X6 V) b+ A; g/ E5 ?        hwiParams.enableInt = FALSE;
; L9 H. p% k5 y0 k+ y        hwiParams.eventId = SYS_INT_GPIO_B5INT;& V5 u9 L4 O! ]( M5 n! `
        hwiParams.priority = 4;5 U: `1 H* Z2 [3 t* |1 l" I
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数/ n' _5 D2 \4 n2 r- K# t# U9 L# D
        if (myHwi == NULL)
9 K1 x7 @8 ?7 T0 M1 n        LOG_FATAL("failed to create hwi");. c% D* M0 D' N( l

9 l$ O, f+ R. r3 X3 G& M+ y! c        /* enable both interrupts */
+ ~1 Y8 a$ ]' f. r. s        Hwi_enableInterrupt(ad->irq_event);
2 V8 _  k& }& Y7 T0 W}  D7 _; G6 ~' d1 u$ Q1 ^. W# I

% x7 O7 f% r1 A' C4 I$ ]4 E
4 R  j( L- M' G/ U5 Tstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
7 k; ]5 z# t0 d3 f. X0 I8 B+ M        volatile unsigned int savePinMux = 0;
9 |% e) F9 W/ g8 D5 J        //初始化5.11、5.9 、 5.5为GPIO口
( ~' z( d, P" }) y* i+ p% _        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));' }9 w+ F$ W; n3 _
2 U" G$ l9 _5 G" b2 T
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);$ X3 ^' j* V. N3 f. T) d4 v6 Z2 W

7 \0 \* p6 H. G. F        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));% d5 p$ ^2 u( B' y

2 W# \% x( t1 m% h9 b1 t% b        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
" E8 S' V# z& y. Z: R6 k' U1 R  ^% D5 ?) L% U, ~2 S
}
3 v* S: U: C5 P" R
4 u1 {- V2 d1 D$ k
# {1 G% I; `1 T1 t2 f- L! q! Sstatic void ad7606_gpio_setup(ad7606 *ad) {& ]. c7 y  g: \6 l! H
        /*Set the AD7606_PAR_BUSY to the input mode*/
" h( }, B. Y, U0 h- f! h2 Y" o        //初始化5.11、5.9 、 5.5为中断口, V: s; y2 R  c/ y- l% _
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);7 B& X2 p% n) X- h* C1 ~
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);$ c) E+ b. R5 Y8 }. q: {
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
9 ^2 k7 j- ^; F. I$ N        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);. X' k3 o4 A7 m
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
8 G* ?7 N! a7 }1 I, ?# `2 ?        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
' Q1 r1 d# B" I. b# ^' K        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);# x- {! |) T) m4 f, v2 x
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);# u7 K( `/ Q- t& J2 Z" z
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);' ]5 p! P7 p# m# m0 i: D/ h6 W
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/9 z7 B" q, h1 K9 F% k# w2 `
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);+ v: k5 D( u! @/ z: ^' y6 T3 U
# e1 \. v* h; S0 E/ `
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);: p, R* u+ ]: P( P+ L& c- `
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
7 `) m# m, [7 w6 J2 x2 [1 u        Task_sleep(1000);0 ~7 C  Q# P8 r5 j9 J3 [" S$ X. y, O
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);$ q- M# p' V. a& R* B7 R
        Task_sleep(1000);
* }' _0 y: _* W" T  X- {; A, J
        /*Set the AD7606_PAR_CONVST to output mode*/
0 H* S* r9 |1 ^  u) U0 \        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
' [9 |: k2 @. t  V        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
) M. B& k4 A& n- n
' t1 K* s4 }, g% b, p        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
( c1 w  R% X7 G& T        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);. n& D7 M+ r( q( s# p$ S+ u& e
5 D7 V5 R' W3 r% ~3 }' h9 a
}
9 G% Z2 b. K& e' L6 @0 F1 ]" _  ]! H& V

" W9 \8 P# B* p. D* mstatic void ad7606_busy_hwi(UArg ad_addr) {
" |2 R  V  ^6 j  }  C/ `( Q0 A8 s0 v- A5 k/ f, T

: k& ~8 p, M- n        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/8 W+ j0 y% |+ J& F4 m# o# n
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。  f! y" j; K' C. c% s4 f9 \7 A

* {$ \/ M# W2 C# q& I' ~9 U; C; n        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
& B) N, m( g% z        {
# }$ k0 H/ B% v' A1 Z8 a) Q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。. y7 |; k" a( `/ I2 M! d, B
                cs_addr = SOC_EMIFA_CS5_ADDR ;
/ Q* @4 `; R- ]4 i& I  }                internal = 0 ;/ D6 Q6 N" v  P; h- N+ t/ `% d+ @( |, |
                int_flag[0] = 1 ;
5 l. f' p2 }& t7 O% d- \        }+ E$ z* r# n, M' v; e! N5 U
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)" i! q3 k) z- c, U& o
        {. j0 I" T! N+ ~2 o- ^
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
7 J' ]. @) _) ^. S                cs_addr = SOC_EMIFA_CS4_ADDR ;2 [2 k+ P% ]0 Y7 U& \2 z
                internal = 6 ;
6 ]. o1 Z0 K0 X1 a4 z. R- M6 V                int_flag[1] = 1 ;9 P0 G6 E- x9 a! Q" \) U( N
        }
! L0 `3 [5 _/ V2 J9 {- E) k        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
/ V" {7 c& c. f, \' Q/ i        {
% P) L- ]1 B# U# c/ G                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。2 q  n0 m! w; ?8 k7 d
                cs_addr = SOC_EMIFA_CS2_ADDR ;! C  a8 b9 ~7 }) f8 ?& S) `
                internal = 12 ;, G) v, G8 r3 y! s6 K
                int_flag[2] = 1 ;3 V% `# W; m$ K) A0 a; t
        }/ J( s7 A  }: T, y& p. e+ f
  
# N8 [7 E- V( _0 D) S        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);7 z; x! H( P1 G1 Z
      
6 v7 b, b! R! \% L; `' [        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
, F# A. g5 t! K: S' V6 ^8 ~}* S+ k( ?% ~& Y" P0 t

0 L- `, N5 Z2 y3 z5 [* _5 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
! i* w/ y% A- O$ K. ~! }( B; w- |# J9 B' U- \6 Y0 ?% d

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-31 06:23 , Processed in 0.044315 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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