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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
, C* K; f% h$ r0 C& n" W- R" s#define AD7606_PAR_BUSY_GPIO_BANK        5
2 w( g+ h" m3 d7 [#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
$ t$ d: o7 f( k* ^2 Z& g: G- o
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11  S, u1 E! w) _$ c  f5 f
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.96 O/ q& g% J- M" J! |0 t0 l
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5" `) B" `6 F& T9 F- A1 b3 [, t6 [! s8 T
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4). g) E8 @" E4 C

( O& F  L0 h# U" \, n8 X#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)' x" C* u7 I* g4 p/ s6 z
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)5 V# U3 y0 C7 A( v0 n% q; f- Z
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
1 {3 o5 W8 U( T& _9 k5 I9 ]  u, G$ L$ u
, u, _6 C! Q( F0 S4 Y5 }" q

1 h& o* x% {, S- z$ Kstatic void ad7606_irq_setup(ad7606 *ad) {5 u- \" W- N* o4 e) l* {$ x
        Hwi_Params hwiParams;/ `. u- r7 p' P; ?5 C$ |
        Hwi_Handle myHwi;
1 O3 p6 \7 w- D& Q. j. ]: X        Error_Block eb;
6 T/ \" {6 h5 x$ L* _* r1 R8 T: R$ [/ j) s' R& k
        Error_init(&eb);
9 n9 G3 U# H3 ^( H5 [) f5 ?        Hwi_Params_init(&hwiParams);
2 r$ b! p& q7 ?  L        hwiParams.arg = (unsigned int)ad;6 j5 i3 h$ _# D9 T/ U0 X
        hwiParams.enableInt = FALSE;  }0 J4 E( E3 G3 P( a
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
* y' ~* C' o% {5 M! i! S- ^5 {' L        hwiParams.priority = 4;, a" b1 Y1 ?6 }3 m. a
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数& Y; V* R% m0 C6 a
        if (myHwi == NULL) ( x( `. N/ q- h% d. V" _% r5 U
        LOG_FATAL("failed to create hwi");
/ |. Y4 j5 K$ F% U" C1 H9 i7 i( {0 R  c# d
        /* enable both interrupts */
0 d- O0 |2 x4 ~. a9 d% w- z0 b        Hwi_enableInterrupt(ad->irq_event);
& n1 y, O0 g" ~/ i}
2 |* U, u9 v* p% X+ J  N* N+ d, U# p

4 J" \7 K- N, ?' \static void ad7606_gpio_pinmux_setup(ad7606 *ad) {( k& a. e& w2 e" x% U  w8 _" m1 Y
        volatile unsigned int savePinMux = 0;, ^. Q& D6 r9 `1 K
        //初始化5.11、5.9 、 5.5为GPIO口+ S9 o' V7 v& D$ u) E) r5 g
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
( n8 Y: k) ]' g) v% A9 |7 }9 L& }" n+ I* ~
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);+ M# [: k" b8 ?/ z, g- ^$ q+ m2 H) T

) s. U! X( l4 d1 G        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));$ u# `7 ?# w+ F) [0 d
. [5 }+ y/ f# F* }' c
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);/ j" J% Q) h$ ~: e

2 V1 W. w8 O! [}3 [& a2 ]; Y" a* h0 P
& a9 E) o% g/ s" L" G3 [- |) {8 ]# I

- l- B8 K# f& `& r) C/ Lstatic void ad7606_gpio_setup(ad7606 *ad) {& Z8 s3 |4 p$ L8 O- k- z0 v& i
        /*Set the AD7606_PAR_BUSY to the input mode*/+ Z- \( m4 q# c* Z6 ]% ?
        //初始化5.11、5.9 、 5.5为中断口2 i3 K8 d' W3 y4 }  u) M
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
* C( G. ^2 M! A: b3 D        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);2 E. W$ D4 C3 L4 h7 W) a9 W- [
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);1 t7 A7 j+ U- }! S" k  Y5 n5 Y
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
: e9 t& z  ]! L0 r6 T! ~1 K        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
) r- m% U! d* s3 k4 F* H        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
& D$ b0 Q* F. F        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
: y& {# S. R  A        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
+ ^8 ?# c1 _$ t9 s        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);3 y5 q  H( q, I: O% G
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
) R* P9 j1 Y3 u; \3 N7 b        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);) B0 D4 h+ ~" F; K! ^/ y
" P" x5 o/ y* E
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);' g- r, h1 M. e
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
0 z( @$ j9 X. e0 |  V        Task_sleep(1000);1 v) b) u5 `( z/ W, j, ]
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
8 T( C. y/ Y4 S/ `- [        Task_sleep(1000);
) v1 }5 Y0 s2 _2 U4 D
4 ^: J% U. q! n        /*Set the AD7606_PAR_CONVST to output mode*/
' d4 A" ^1 m2 s, R3 B        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);: u6 q2 }9 H$ v
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);) r5 `) ]7 @* n) l0 F
( _/ q$ [1 f: x& M, g! }
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);. U; _6 b: C5 z9 a& {1 R
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);8 _1 a8 u  b& A! N6 U4 @) L
& V6 E! P" }/ m
}
8 p4 O) X$ y" f0 l  A" F/ p( W8 L7 R/ N" K
# @. o! c6 X0 }
5 K0 O5 O  U1 s$ |static void ad7606_busy_hwi(UArg ad_addr) {' J% c0 f+ ]" b" [
$ ^+ F* \4 `  ?# P% i5 I

5 c# y9 x1 f' ~+ Y9 Z& B        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/" m3 B7 \' s- j2 R7 U: _
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。3 C  P* U5 I+ i& j
+ r) S' I+ _1 X4 G
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND). N, J: z3 N9 N1 \$ A
        {# d6 Z; [( h; q! O9 S, b- y
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。+ X" t4 F' l7 h6 r* k
                cs_addr = SOC_EMIFA_CS5_ADDR ;- V/ s9 L/ G* I& _3 W  e' K
                internal = 0 ;% H5 I6 T" H# R; U5 h
                int_flag[0] = 1 ;
! E# n$ O) K7 V) t/ Z        }+ C4 o3 W5 O4 k" X% V$ l
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
+ a2 l8 F9 X: O" M$ h        {
2 w/ M0 G' ~1 V7 ~% A5 q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。7 ~% f' Z8 l2 m, D6 r# X% y
                cs_addr = SOC_EMIFA_CS4_ADDR ;0 p! g8 {; h: ]
                internal = 6 ;
* x5 U* x7 M" h' i8 o6 ^! m& r2 r7 X                int_flag[1] = 1 ;
2 X! |. A; N& v: W, j! N, ?) o3 ]0 |9 |        }
$ o  l0 d4 p; h: Q7 N$ ?        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND): }3 c9 c8 M2 e
        {2 v) l9 l) f: o" S! T
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。* W- {+ G6 y, ]: H- k+ Z& ?3 R" G
                cs_addr = SOC_EMIFA_CS2_ADDR ;
5 P7 O5 }) S* f4 m* L, f                internal = 12 ;$ Z1 |" b7 m: r" u$ }4 @; g
                int_flag[2] = 1 ;
3 |2 W; H. y1 }0 H4 \1 v" o# v4 f3 j        }
$ W; h' S; P6 g' H& L  
2 c  N9 o; d# m7 u$ ?1 n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
' s1 g7 p$ v+ R      
6 w' l" g! q3 D$ |) q% L        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
: i5 w7 w# b1 b) ?}4 r3 z6 f! W) Z

( d( u# G% |$ ^/ L. y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图8 r1 l# ^1 d/ ?  R0 C+ G; r) O

% n- Y( J/ N9 H! R

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 16:26 , Processed in 0.037636 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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