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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:$ b7 t+ A# f% _
#define AD7606_PAR_BUSY_GPIO_BANK        5
6 m0 F5 t9 n/ m9 ]' T5 l#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT: F; v% x0 f% s% J: n
7 \+ q2 ~- G3 z8 d! c
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
; [8 j, R3 a! a) x7 `, j7 H#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
; N7 ?8 \  _' k% e; Q1 l#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
) ~6 @6 C2 a1 t5 w7 C& W$ Y#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
; |/ P6 C1 ]$ r# K3 b& O, ~  ~7 l4 E7 j0 l& N% F' K
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)* h' j# L& e: k
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)9 t0 _/ O6 V" O* r  [3 J0 |
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
* d" ^% S( _7 T9 ?  ]4 Y# C# i- Z) j% |

: X% R* o( T# ]7 d+ A$ `/ J, U, }: q5 ~! R8 m
static void ad7606_irq_setup(ad7606 *ad) {
. U& P  o7 d# n! L% S# t: _/ z        Hwi_Params hwiParams;1 ^) }5 b" b9 Q, A1 s' H
        Hwi_Handle myHwi;# d" q7 W) A7 K
        Error_Block eb;; n) E7 p; F( {" K* s

/ k/ D6 x0 j" Q6 [( b3 k, H        Error_init(&eb);" x3 T& \  f, ?$ i. A
        Hwi_Params_init(&hwiParams);
; w- R# D6 @/ c1 {        hwiParams.arg = (unsigned int)ad;
1 R9 n9 p  J: O9 s; u# a4 \) Y( b9 i        hwiParams.enableInt = FALSE;
% Q6 C2 f. G' L# X. b        hwiParams.eventId = SYS_INT_GPIO_B5INT;3 P9 l" O8 T- X; h/ z3 M0 L9 [
        hwiParams.priority = 4;
* J  Y9 c0 m' d0 o        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
  ?+ w3 \, w) [1 c2 m& \        if (myHwi == NULL) ( @' v8 b0 e" U, z
        LOG_FATAL("failed to create hwi");* a/ R  Z# _# {6 q0 W" b6 r5 n

1 `. h& I9 R3 E# V+ d% G        /* enable both interrupts */8 z. ~3 Q# r! X, ?
        Hwi_enableInterrupt(ad->irq_event);7 c( c. X+ p: Y1 m
}, V( B! E* G# x4 `8 C# W7 ^7 C8 C* g1 u
5 l! M0 D: {" W0 }* I1 k, L

0 b5 {9 Z7 I1 Ystatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {4 Q+ ~, q* t  Q9 _# z9 O$ ^
        volatile unsigned int savePinMux = 0;! Q$ Z. d% k' p9 a
        //初始化5.11、5.9 、 5.5为GPIO口
8 y+ d* \+ l2 `        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
5 R3 u/ V) d. P0 u9 ~# ^% [2 Y2 r7 T
/ s* B# X3 Z0 z9 I# T        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
+ u' |& y2 J  v# J+ w& [: X& }6 J' ?( ?, G. i
        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));
7 E3 F6 K  I" r2 d) e5 I
! a, }+ M& H; r/ K2 x. r) c* z        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
$ L1 _# ]6 \+ Y' L: Q- Y" r7 D1 G
}
5 H# S6 k- a* a7 {  p
4 v5 e7 Z  E0 D/ ^* Q. Z$ g4 x8 N: a- `8 `6 O- c7 l4 Q) E
static void ad7606_gpio_setup(ad7606 *ad) {8 @3 X3 e& w8 O% `6 |! H
        /*Set the AD7606_PAR_BUSY to the input mode*/
' v5 H. S  x9 y        //初始化5.11、5.9 、 5.5为中断口
( v. g2 O: V1 \& q# c( |! Z. O        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);! ]9 ]. V$ Z; E
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
' o- N* B; B, |* X        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
7 R5 j3 L5 b4 t; ^3 ^1 U% D- ^: ?        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);- s" I4 i7 K5 p' w' {6 _) J
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/& q6 n) Q* w- B$ R3 `& O0 [
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);2 t0 l* ]% _8 Z8 V: e. _
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
( }* e3 D- w& X$ T* l        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);+ W/ {# F, A$ v" ]/ w% b& L
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
7 b/ w. Y$ K/ C, O$ T- w        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
; o) m# Z9 ]1 T        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);& D, Y9 J( B$ b+ h( N1 J, S; ^5 [3 z
0 O2 {( @" [( F
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);- Z6 K7 {  n6 F  q5 a0 y. J
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
, j( T# R3 T/ T/ U. r+ j) `* U: A        Task_sleep(1000);! y6 u3 @. I- x% p% `
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);& ?: A$ p8 ^$ G, f. H
        Task_sleep(1000);7 Y7 g8 n+ f- K# C. ^: n

- ~2 c5 u. n) s0 ?9 _* L3 H! I        /*Set the AD7606_PAR_CONVST to output mode*/
, K/ ~# I6 Q" ?2 a' I7 f        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
4 U- b" Z9 k0 K# [) b9 c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
: `% N* j+ D' y8 W" k: v" [
) p, U  I! m6 x        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
3 z5 z- `1 \( c2 @* n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
) L$ G# u) a. }
% B$ I0 A" U# H' [7 y}3 X/ d( b8 k- [5 v" W7 ?4 {
3 t% n$ q0 J1 D+ ^& |! o  m5 [
9 Q4 G& j. ?& N5 q
static void ad7606_busy_hwi(UArg ad_addr) {: v1 N" Z  W: i/ I. T

7 y, k/ {7 t- J* x8 A$ `7 |/ e
7 [9 b/ O! r/ T        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/5 z1 o6 C) C1 [0 H( ]# L# S
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。8 Y4 j1 v* Z7 E; l) \: y; D

3 M& |. z. q% I) I        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)% t% z& D& c# T" w' W2 A: ^
        {1 G* y  i  M- g! g% }
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
7 p/ j# E' ^4 L0 j                cs_addr = SOC_EMIFA_CS5_ADDR ;' c2 l5 E( P0 b1 s- d4 S7 G
                internal = 0 ;
; z2 N4 h& Y, k# {                int_flag[0] = 1 ;7 @$ v1 I) f3 h
        }% r7 v( d6 q; j6 X( W
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
" Z2 [0 R$ `8 ~' y- J% K        {
7 `* I! E# y% C: Z7 e' U                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。' E9 V- I7 k* ^3 x, z
                cs_addr = SOC_EMIFA_CS4_ADDR ;/ o. D6 n# X. f
                internal = 6 ;
7 j4 i8 m9 u6 C% H' S                int_flag[1] = 1 ;
* D# x  }$ q* A* a        }
! G8 t, E* w3 ~  \        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)9 w3 \  f. H- K+ X3 b. n9 X5 p; j
        {; q1 M2 j7 `4 b' h2 V
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
, X4 @' R4 f$ a' x, T( M                cs_addr = SOC_EMIFA_CS2_ADDR ;
6 a5 J  @, r1 I4 r  Q1 A                internal = 12 ;
/ j1 p, N' X2 O                int_flag[2] = 1 ;
$ z! ?9 |" R6 Y        }" _- ~2 A7 y1 a( ~+ _: n6 Q
  " v- |1 Q) \- B7 ~# ~2 [
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
: x$ D# k4 d! @      
1 G, E- E! v: {9 P$ e1 [        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
6 _, w* M$ q  ?7 L; w  p4 A* Q}
! K7 E1 q. o- G, m. Y& s( W: U" Y9 k* M6 {5 U" @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
! }  y) s' w6 z
& n! r* \" T2 ?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 06:43 , Processed in 0.043630 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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