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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
5 g6 m7 X* }. e0 A. S#define AD7606_PAR_BUSY_GPIO_BANK        5) D5 O  u3 \( m  h; x
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT9 }1 G/ b1 [. g' ]

1 k% ^, b7 D. y6 p0 q#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11( m* K  _. E6 P( A% g# \. d. n+ ~
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9! U# Z7 P/ N! w9 t
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5+ c% J, r& @) x( ~3 y3 W" d
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4), K2 C4 R$ S. P5 Q, ?, Y
' l! {" h0 h4 k* S- d1 I
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)" M3 V5 H' V9 s; m; s* ~3 i
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
4 G$ v$ F4 _4 g3 V#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)/ Y3 P2 w, @; I0 s. p. G1 R

. o+ S2 b3 ]. G! u5 y" u. v
/ }. s" x1 h3 @, C
+ i5 Z. a8 ]- g( J& i( A3 ?. Lstatic void ad7606_irq_setup(ad7606 *ad) {
) y' r: H6 k- n- D* N+ j        Hwi_Params hwiParams;% m8 Z8 A  |% w* x
        Hwi_Handle myHwi;
/ {' z3 h0 {" X        Error_Block eb;3 E: T& Z/ T  ]

- ^  j2 n4 D% {0 L& m# d        Error_init(&eb);
0 {1 |5 c. I9 U& |        Hwi_Params_init(&hwiParams);  i" s2 P  {9 T: ^5 g! h- I' g/ d
        hwiParams.arg = (unsigned int)ad;
1 P  p& N, e  T" d& A1 L        hwiParams.enableInt = FALSE;
# {( R4 ^+ r) ]) e8 G        hwiParams.eventId = SYS_INT_GPIO_B5INT;
3 x6 ?, d* R% U5 k- H  F0 f        hwiParams.priority = 4;
6 T2 g8 a! `& i& a$ r& I        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数0 Y+ `8 }2 C+ q* ^
        if (myHwi == NULL)
% a9 \' I( o, y5 y  S+ W- j        LOG_FATAL("failed to create hwi");
$ c3 ?0 h8 S2 {8 d0 [
1 ^( z6 @) \6 P- p9 D% `' X        /* enable both interrupts */+ p$ D  F. z$ ?0 O; m, L* Y1 ?5 p
        Hwi_enableInterrupt(ad->irq_event);  J0 M2 l1 U/ ?/ Q- h0 N+ b
}
4 a7 P( |3 I' Z. b
/ N( w# y8 m1 T, [9 i& x7 W$ g# H' h; p' a
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {5 o' Z5 Y# f3 V$ L7 B% F# r+ f
        volatile unsigned int savePinMux = 0;8 N2 E/ q% N6 N5 w' ^6 L; |
        //初始化5.11、5.9 、 5.5为GPIO口& W9 P6 A% R: P. l
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
: F. \0 T& O$ h& [7 L9 z1 ]  d" O# @1 f2 x- Z" F7 g, f7 X
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);$ `' _3 m; P0 w
2 _; F" Y. L- v' d3 V
        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));. B4 W  i) Q5 @4 t
! N+ e! y1 o# \
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);4 S; P5 E. I/ k- [# p1 q4 G! y' f

8 \; \/ [5 X  U}: L( _( J& c, z' S; c7 ?: E  k3 Q
8 x; f" K% w5 Q! P

! g/ Z8 P9 I) r# ]3 cstatic void ad7606_gpio_setup(ad7606 *ad) {, w5 N2 b6 e. `8 V8 g: A
        /*Set the AD7606_PAR_BUSY to the input mode*/2 Q) W6 b4 h; D5 F
        //初始化5.11、5.9 、 5.5为中断口
& ~5 j% _! k+ H0 ~+ a; U! \        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
; N! y. C% Z# Q/ i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
# T: A9 C8 Z, J) B2 p2 m        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);/ V1 L6 t  {% B* y+ X: B
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);9 h1 u( x# C; N2 G
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/( a" }: F1 a+ y/ R9 Q7 D& g
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);# b9 x5 p0 i( W4 V+ Y! R
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
( f1 d5 S3 l0 w  S3 M* a0 H; |- s. D        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
6 K. W: D# M) f' u# v5 L        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);5 Q' k1 b0 c6 D5 ^
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/5 e  j: x7 c) v/ J5 G4 ~
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
: u5 Q- Y" o2 I; ?. T1 @# r; e% {3 H9 e
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);4 C+ Y$ N; N* T8 @" Q
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);/ @# X$ w/ ~4 P, s
        Task_sleep(1000);+ a( {& q+ t! {: z. J) S
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
5 |" V$ `( {$ p5 z* b, O        Task_sleep(1000);
: ^- P* t4 X% ^( \8 i
- ^) A2 G6 X$ g3 h2 s( V        /*Set the AD7606_PAR_CONVST to output mode*/
/ A6 P* [$ s6 G2 `+ E        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);- ]; W1 R2 c) H; I1 B
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
5 b5 ?: C1 Y0 ^3 p5 _7 {
$ ?% U: z7 b$ A3 h        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);( q, ^. n1 r% y' S
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
8 ?+ @6 o  w7 }& |) V8 U& f( |
; Z) Z+ ~$ U" c5 ~7 x, g* F}
& j8 T( D. r$ g2 O$ ]  S2 A7 z( o# D* p& T

# s8 o6 x8 W+ `0 _3 n: g, F% |4 Wstatic void ad7606_busy_hwi(UArg ad_addr) {
0 V' b% Z, H1 c% f
5 C, {: ?. N; _/ \( o! W" H: m2 i+ k: z2 j/ G/ g  n8 X9 H
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/: x: L! W% P( ^4 z
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
# K& ~/ A2 O6 I6 X6 h6 I: M4 Z+ j- c9 a9 m
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)! U; b9 l: o& ?5 |" v3 ?1 Y" B; t
        {
$ `/ b" f0 _0 h, o/ f. m/ Z                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
  U$ M* Q' X" Z( `6 d                cs_addr = SOC_EMIFA_CS5_ADDR ;& q# x+ Q1 p7 h8 D, `
                internal = 0 ;3 w5 Z+ Z) [. |% `/ D
                int_flag[0] = 1 ;
2 V; w- I5 k! o. s8 T        }* ?4 U) E/ [; u' L/ L3 N9 |
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)  O3 t2 o0 {/ f. O8 V0 R4 v
        {
9 D7 ^* v3 f) O0 y; s                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
7 l9 t, n1 O# R9 a- E8 g                cs_addr = SOC_EMIFA_CS4_ADDR ;
6 }" U* `! h6 ^3 |  x0 x7 s                internal = 6 ;
2 x  F$ K/ s" E$ @# n                int_flag[1] = 1 ;
( A# U) q7 R% q7 f        }
% }& o( F' ~# i# K5 r! R0 ~1 v& z        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
- l4 L( Z2 ~$ [) l  G4 j/ j        {/ Z( T4 p9 Y3 f. |1 h! U$ B" J7 p
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。; u/ y) O6 M8 A+ N  W0 L+ R4 i5 w7 p; y
                cs_addr = SOC_EMIFA_CS2_ADDR ;5 j. A& [% v2 {6 z
                internal = 12 ;0 P4 c" q6 l2 ~6 G
                int_flag[2] = 1 ;, R& T9 ~4 S1 {; }  _3 w
        }  q5 L' b1 r/ M" g
  
7 I3 H/ e. D4 {& Y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);  `" j2 z4 b0 b
      
1 a/ _- _7 c1 m: H' A# ^- ^- S        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
% Y3 A4 s& f, O! y' z7 _1 H}
0 F! r6 n' @& C+ O, D- `" ]* [& p. [2 M) X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图8 r9 O( z8 Z# W4 _# u3 i

0 k3 i' J* w& v, O( _

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 18:13 , Processed in 0.044796 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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