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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
" Z3 H! N& x/ L' e* `0 B#define AD7606_PAR_BUSY_GPIO_BANK        5/ L- h5 t5 V( A& R
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT  @+ o$ s" L' p+ B  c
, R7 |* P0 j9 j' m0 y2 L3 j) L
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
; ^' `0 n1 L, U+ S; ^#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9& u1 R0 |+ b& p/ Z4 C
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
8 O% C1 O8 ~0 d+ V4 q/ e#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
$ J0 b+ V6 S/ d" u# U# n3 R8 o; q; x6 |1 [
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1), b% T  a3 }4 L$ d% q6 A) F; u
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
) @' j* J" r7 C. w. w8 A8 M#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)7 O, m  x# G0 h7 J: a
( ~) l6 h/ b; l* q! [
3 T) J5 v. E1 C* r, B  k

5 ~, H  p9 X: I2 _% wstatic void ad7606_irq_setup(ad7606 *ad) {
1 Y1 }9 v, L, ]9 O( T. v        Hwi_Params hwiParams;
1 Q* |7 D& v, F        Hwi_Handle myHwi;  Y: z, ?. y. e+ [2 W# s# f; A
        Error_Block eb;
7 V% Y$ D  `* t& I6 d( T% Y! k0 [
        Error_init(&eb);4 S% j/ t, e$ |0 [" K$ Q) P6 C
        Hwi_Params_init(&hwiParams);5 A( F+ n. ?+ S5 A" T6 a5 U
        hwiParams.arg = (unsigned int)ad;
9 z) d0 o: ?/ ?8 h/ \$ ^" ^        hwiParams.enableInt = FALSE;
3 K) g& ]( Q* f/ H% W        hwiParams.eventId = SYS_INT_GPIO_B5INT;
. G* l6 K) F% P) G: o9 t, Z7 n5 B* z        hwiParams.priority = 4;1 Y3 |8 d8 p" b. H
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
( t$ }- I( j3 Y6 J        if (myHwi == NULL)
) s4 i* U4 ?' {) K        LOG_FATAL("failed to create hwi");
$ l  v% s0 F: |: }
! u& s7 ~6 o* H& I' X* O        /* enable both interrupts */
' @+ L- k( {! C0 t        Hwi_enableInterrupt(ad->irq_event);& F, U) ?, T$ Q  ^. x/ X+ h
}0 O0 c+ i8 C) W4 D

7 \, Z3 k: w" v) i
, S. E8 }7 Y  q6 w( ^: Vstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {0 N  k; y7 `# e! ]
        volatile unsigned int savePinMux = 0;2 [' M/ e0 P3 T& g0 n, @1 K2 g7 G# c8 ~
        //初始化5.11、5.9 、 5.5为GPIO口) W8 `) e5 z- K2 b; z6 ?9 {
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
. Y! M% _" m4 i; J( V, u8 c
& z) w3 g9 U& u0 m        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
# e' ~" R, H  c! K
% L  V9 v$ Q+ w. J# q" t        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 t+ M5 N; ~/ ]7 P  w9 l

- {6 f4 R6 Z5 A) E5 f/ ?: G8 c; A$ g        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);4 x' `# ?% F$ U5 i9 u
: @+ N! D8 x; [) ?, s* |
}8 S0 E& M( C3 X& U5 g

% C. w# F% ^& @
3 X! t3 s( ?  m; N% dstatic void ad7606_gpio_setup(ad7606 *ad) {- |& {/ `7 f+ x- z" Y
        /*Set the AD7606_PAR_BUSY to the input mode*/
+ X3 E! g2 H' z7 u7 S' `. q        //初始化5.11、5.9 、 5.5为中断口3 d% f( D. P' x/ @6 Y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
( I" i% k. @3 _. H+ S6 X2 C        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
8 b! b0 x$ ~% B        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
0 l) I8 F: Y6 Y: G8 m        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
6 C! c8 O+ u* _1 [5 Z        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
9 S: G. ?; U5 Q" y! D0 ?$ n        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
/ ~  u' h# w# k        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
0 ^8 s# x. @, b; @: Z. \: R        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);1 K. y; P% ~. ]5 i% _
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
& [* k; Q& F6 S3 |4 ]1 u8 g        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
7 b7 M- G8 |1 ?: U5 u  H+ H        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
7 F- q: o6 h7 d: y7 O. P/ a
2 f  I- O+ h/ u" l$ P, w, Z        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
8 ~: E) S- ^. r0 B4 b$ B        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
* j% P% u7 J5 U5 |( ~+ g        Task_sleep(1000);
- |% b2 j5 S( r$ b2 h$ B: m        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);* n/ L0 B. \: `) a( A' X4 v
        Task_sleep(1000);" D$ `0 W* D8 e( p8 t/ J8 I
, g$ ?3 F* q5 N4 n; r  C) O3 _
        /*Set the AD7606_PAR_CONVST to output mode*/* T) K$ p1 y& A$ ^
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);' f! X( Y8 Q. o. [
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
6 F0 I# b3 n, H# m( j
# `# Y) X  L' z7 n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
& s9 z1 e  L$ S5 V; ?        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);* [4 k: i% }8 t+ {4 D6 `
+ W& t: k( ]) Q) ]! L) D& G8 _
}7 ]8 s/ E2 p7 M

3 G4 n3 ]7 k' H- q+ B( O: o2 `% M# U9 Y: p& |
static void ad7606_busy_hwi(UArg ad_addr) {
3 R: K$ |2 _3 K5 b) v- X) V$ [
7 g- D! {' N1 y
" ?  w: |4 c$ i& t        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
& ^7 t( O" x. b# `        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
2 }0 r2 q2 Z3 ~, H- Z/ T, T2 \/ ?! y- |, ]( ]5 L
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)+ R* \* a. v" z5 }
        {* O, J$ o4 V, U# G$ y* d
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
3 x  e; Y- V5 q, ~) ~3 _4 O                cs_addr = SOC_EMIFA_CS5_ADDR ;
- _2 z  H" G+ _: |& m' \( q                internal = 0 ;
$ i! L' k& A2 B/ M                int_flag[0] = 1 ;1 r2 u9 L1 R1 f% l4 G8 k
        }% I" k7 t* d$ R% N. X: r  p9 l
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)" m! I; r" X1 d
        {
# }' s" ^. g8 r$ o% U/ O/ g                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。' {1 d" [- M: _5 o( l, c
                cs_addr = SOC_EMIFA_CS4_ADDR ;
+ C% |# P# J5 G                internal = 6 ;  w5 X5 w$ Y4 K; P8 \* [
                int_flag[1] = 1 ;
1 G2 a1 u, U% Z1 [6 U        }1 l9 Y3 M  Z9 Q; U0 r% f6 `
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
6 O* G' |& ]6 o, d; O& l        {
  d" F8 ?# q8 K9 k8 }& ^% ^3 N                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。, ~9 @  D  @1 Q- V& t, _
                cs_addr = SOC_EMIFA_CS2_ADDR ;- v1 p& V( C! z8 T2 j
                internal = 12 ;
5 j- L  _* y  b- d$ X$ s                int_flag[2] = 1 ;6 k, y% `7 P6 F7 m+ T2 _: f
        }
2 E0 i% y2 q3 M* Z- ?  
6 ]! u5 u6 u5 |3 V. S1 e! G! K: s) V        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);- i! d+ B3 U5 e( X& E- \
      
; k4 @1 D* b5 ^# [+ w. m+ t) Z+ o        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
6 x# X& [; L6 Y1 u: |. b}
  v/ \. x. d  R# Y* o: O
4 v9 ~* h; k2 @' v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
& k: Z$ ?0 j" e5 X, l" Q
" g- N! w8 ~0 F7 ]- T

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 05:05 , Processed in 0.057090 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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