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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
/ D2 ~. A0 W0 m/ h% o9 F5 w#define AD7606_PAR_BUSY_GPIO_BANK        57 J/ r# N9 L; x# L
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT( c- E0 U0 M9 G; ?

8 x* }6 d3 C$ W/ w#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.118 {! z/ \: x- k' H4 H* }
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
/ M  o: Q& y$ ]/ Q$ m9 |% @#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
6 {5 g+ j7 d4 k" t% N6 [$ {#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
5 E6 J0 Z7 d: a# Y! L$ u3 _$ n3 H* `6 I: N
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)  P2 d$ m! ~- ?2 m7 J: M1 b
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
$ U: B8 _7 N. j2 N+ P8 y#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
( f2 B& T7 ~7 w; H+ v, P6 D! o' W. n* B& z

. ], w# P* E* o2 K, y
1 A/ ?! V& k' Q: Ystatic void ad7606_irq_setup(ad7606 *ad) {
- B/ ]& i0 f0 [) V. a, J        Hwi_Params hwiParams;: k( r& j% F* m$ P. y) W# d) C6 H
        Hwi_Handle myHwi;6 I- P" v" _% U4 E6 S* o- `; ?
        Error_Block eb;4 ?, L8 f" t- n2 _; t* Y
6 _1 q  [# u/ B, X* T1 }
        Error_init(&eb);( A- u3 a0 G1 \% J
        Hwi_Params_init(&hwiParams);
. X1 E! q" o2 t3 O7 @: t% @( f! d        hwiParams.arg = (unsigned int)ad;
* ^- T4 b( d5 ~. F$ D* Y        hwiParams.enableInt = FALSE;9 p9 ]! q/ D) @$ o; E2 ~
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
1 s, {; G- C, ^8 k! z: ^" A        hwiParams.priority = 4;" u! {% Z2 F" M, D
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
2 L& I2 _$ d3 z1 B" |8 D8 U1 o        if (myHwi == NULL) 7 o6 f, r" o: Z3 t
        LOG_FATAL("failed to create hwi");
# r. q& m2 o, y: w/ `! n2 ~) f; u& B- h- R7 i/ U: w3 @
        /* enable both interrupts */. G; _% K" i- K/ T/ f* _
        Hwi_enableInterrupt(ad->irq_event);/ m7 [3 @: ]$ }+ ~. m/ ?
}' z( G; p  z, c( U/ L. K4 A! w
. n! f2 n2 l# |0 g

4 r: `% l$ U4 G1 y" q8 nstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {0 O( P, s) n& @
        volatile unsigned int savePinMux = 0;
; B6 g4 W9 ^- b3 x        //初始化5.11、5.9 、 5.5为GPIO口( |! m. x0 |# w" Y8 I, j8 G
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
$ i# ~- y* e, E9 U# a5 n4 K- h5 G" N
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);* P6 E# ^2 Z" x& g
% k4 ?0 H5 b8 _* p4 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));4 D; p- q" ?+ y! _' W8 O  X. \- g
3 x: B/ M( d$ A* C9 V% V
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);5 [' r0 @6 k* j* [% D  w! n4 q

/ D/ o+ D9 \' \: R  M}
* A) s- A2 p5 i; A6 B
0 y5 ~, P& W5 y; F; E
# }$ ]. Q8 t' f: dstatic void ad7606_gpio_setup(ad7606 *ad) {0 r' e; ?7 I$ f
        /*Set the AD7606_PAR_BUSY to the input mode*/& V, c8 i5 E4 j* E. ^9 l2 O
        //初始化5.11、5.9 、 5.5为中断口
% D. u  a( q+ U' W7 |: y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);8 L' T# g0 W/ T! O
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
2 W' a# `: W% F4 u6 M+ w        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
  T  W9 f$ P* k! P) q: A0 J        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);7 c" g; q9 T6 Y% G
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/. r* z  F/ S2 C
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);# Q3 F* [% u3 ]* M7 q; |
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
/ P+ n7 t  T; Z! P% ?) o4 B) {        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);$ J8 N6 {9 _2 n) x% X0 _4 N
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);, H+ G% C5 H# T
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
7 C, d* a: H7 [1 t  F( m3 ]        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
4 E: m- h8 p/ f; b6 W2 T; q6 @, s1 f9 _4 X$ M: ?
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);0 t, z5 n8 y1 @+ A7 Y# l" W* i' }8 L
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);7 W$ }1 H; m/ B, x/ d2 t
        Task_sleep(1000);
; b4 h7 b, N( Y2 w, m        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);/ q( v- I9 u6 Q: Z6 F2 T2 k
        Task_sleep(1000);
3 {' `; e0 V8 j. C; A$ G7 Y0 A) P* r* Q3 x5 P) @
        /*Set the AD7606_PAR_CONVST to output mode*/
/ b3 a& T2 M' N        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);+ e7 \3 H3 E8 e
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);( O' b. P/ O! Y! S: e
* [- I3 v3 f; i" u$ M
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);- n. z! {+ y1 B7 L7 b" x- }3 I
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
/ a. ~2 A) \5 T) R5 E, h2 Z8 x4 Q7 P% z, b" k3 [; l1 K( \
}
, e: i4 y5 h+ ?% j
* k4 w8 Y; H1 C$ o, }; I0 G7 z* O+ Q" V$ e
static void ad7606_busy_hwi(UArg ad_addr) {0 M9 V, @0 l$ e* c' h0 X

- ?% O! h7 T/ J: a: t1 {
! Z1 N( P1 a7 q$ i0 A/ S* i; y        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/6 e4 \- G, H7 u
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。( M, P9 }* f* t0 T' S2 k1 [1 D
9 g7 t$ ]( ~: j7 B0 X
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
3 I$ p; @$ E9 q        {
. j; q5 K" z; `; r4 j9 [                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。. ]8 N" m" F1 b3 C
                cs_addr = SOC_EMIFA_CS5_ADDR ;
+ Z8 N) }9 E% f7 K; W                internal = 0 ;0 p5 r& b7 T8 ]0 U9 }; H
                int_flag[0] = 1 ;
5 K$ T1 w2 Y# q" M0 G1 v8 n        }/ f, e# D6 x& |% j* d
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
3 p) \6 i4 J" y& D        {6 \  ]- T4 Z! T/ f; B& R4 X/ {8 d
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。! z/ H- c7 D' S  m" M
                cs_addr = SOC_EMIFA_CS4_ADDR ;
- N; l5 s; d5 x( s                internal = 6 ;6 I4 q% ~: V. ]# [& x! O7 m. b
                int_flag[1] = 1 ;% n7 x' h  ~& Z4 j# y( m8 @
        }
& k% ]' L) {' `6 f$ t/ ?( D' [- N" i        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)6 l6 j! j8 a/ \. Q' G+ |9 m* q' `
        {
) s2 t6 u5 ]) y7 K! x: `# U% S                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
4 @# ]2 i9 X: e2 r                cs_addr = SOC_EMIFA_CS2_ADDR ;% l# S: u$ Q8 Y4 X' ~$ }
                internal = 12 ;
- Y% M: c4 C4 j# ~3 q2 T2 h8 k$ d! }  _                int_flag[2] = 1 ;" z+ c1 d- H' [
        }
, J5 j; a% {% C; R  
* ^  ]6 w6 G5 C) X0 u* R        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
; E4 a* @$ p1 r       ( u9 ^* p* V& c' n$ H+ k
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
. y% f) K5 v# t* X- t* r% H}: g; p1 Z' n  _% F  E: i+ Q
  a9 f! N& G+ I& q$ x
3 E2 p7 p9 r, y& _

5 C5 T9 x) o; f6 s$ W: ?" }$ Q4 ~$ J5 v' C0 T

本帖子中包含更多资源

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

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, 2025-6-18 09:13 , Processed in 0.038127 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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