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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
& Y- \& f% J# n5 B# v9 E3 r# J5 u#define AD7606_PAR_BUSY_GPIO_BANK        5
" }: e* z4 U7 Q+ c#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
* h+ I  k, m1 i. a  V. F2 a' r
+ g5 Q( L; C- U7 y* E- ?#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11& J0 \/ L2 V2 [. w+ s
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9$ V* q6 _( n8 Q
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
  N/ d0 X0 V  f7 i0 X1 [/ @#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)# g. @: d! L: U" k

' I- B0 B, {  K% S: }#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)2 X4 K, l4 c" x+ n8 A
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
# }: ~& r0 J# _. q3 a3 i- [; H0 D6 @#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
& D1 ~  K+ y$ v, \6 k+ k6 a# V1 e
7 }; `  e, m$ q4 x$ p
" L+ ^5 V& c* v4 `/ C6 Q
7 x9 |/ m; \, U% e7 b# nstatic void ad7606_irq_setup(ad7606 *ad) {
- e$ W; m' D' e& S" N        Hwi_Params hwiParams;+ k! [( w1 I- G- R& O
        Hwi_Handle myHwi;: |" Q5 a1 u- Z. S
        Error_Block eb;
$ H% D# }2 F3 o+ j; F) j9 J7 k; F" a, I2 i% P- \. z+ a
        Error_init(&eb);
8 @6 q+ a& _2 c8 B/ e3 p  @: Z        Hwi_Params_init(&hwiParams);
! y8 l) K( ]0 D* t) J        hwiParams.arg = (unsigned int)ad;. T% d, ?/ S' b) `0 |! H
        hwiParams.enableInt = FALSE;8 C7 z) L- p/ x6 c7 m( j
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
0 l' Q6 _5 |5 q. a( x  k6 P; N        hwiParams.priority = 4;
( C& D9 t- Y9 ]. A3 ]5 p        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数6 [5 ?% K# I5 K; [6 K2 G
        if (myHwi == NULL) 3 k6 D* @4 C5 d
        LOG_FATAL("failed to create hwi");! A* p4 M% ~' P3 G

' C$ w4 G" A. q: v1 z# L1 K        /* enable both interrupts */8 M& @3 r' X  `! ?/ m, {8 M
        Hwi_enableInterrupt(ad->irq_event);! u. r7 Z# r5 ~( l' {
}1 s, k5 l8 `: w3 M
& n# a! b9 M% m' Y" g
5 D+ n3 Z! f/ O- Y
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
# T8 ?; v3 H4 i- J* W        volatile unsigned int savePinMux = 0;
" ^% M5 G/ A8 h# s6 U7 l4 `& ~        //初始化5.11、5.9 、 5.5为GPIO口
1 _7 _* _& [7 a        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));1 S6 J( n( h! O& `
1 L" L( w" o( d+ `( ~) ~
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
7 v7 h5 e* q; T, m% Y
7 j3 i! f' Y* k' d9 g+ a        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));) O) M: L, E, n: d4 z, d$ f

; B* W1 i4 Q2 h- ~: F        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
; m3 U8 j3 J5 X$ B, K. Y7 V. }" ]1 w
}4 y( h2 S& l1 H6 S( L$ C! z
3 v5 U. o0 ~; A' p$ J+ E

9 A. @% s( k0 D: Lstatic void ad7606_gpio_setup(ad7606 *ad) {
9 O: A: V  @& t6 e' }3 k% k        /*Set the AD7606_PAR_BUSY to the input mode*/, o8 E# j( I6 B- U/ q* X
        //初始化5.11、5.9 、 5.5为中断口
7 V* a0 ~0 |$ a7 i/ h        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
2 U# c5 c0 L6 G& h1 d" v3 s7 _        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
: t' N( @$ C* {7 z7 L2 k        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
  Z  o9 L- b0 D, h- B        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
& |; _8 e5 z* ]8 v' A        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/, B! g( y) d; S5 v3 X4 t! J7 p
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
9 g. Q/ ~) l6 v        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
# j; a8 `7 O# c) |  o6 F        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
% s5 e: _4 @* f        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);! y& ^, M! P, N& ?" t5 T2 p# X/ l, r
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/3 X  r% [1 z) g+ t2 E1 M7 y! ^4 ?
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
! s9 L3 E" D$ G; O( v) h1 D2 |9 g- }4 q5 F+ \' ?
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);, L# M- {1 @, j0 Z- V4 T! U3 Y6 U
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
* U. }: q$ g3 Z5 X: m  _0 _$ a        Task_sleep(1000);
% p" \9 }: D1 l        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);- N. A6 b2 h) Z% v4 y
        Task_sleep(1000);
8 R* _; u( @: Q0 b5 h4 M- D" c% i) n5 W3 Y+ J: U
        /*Set the AD7606_PAR_CONVST to output mode*/9 c% [% B& Y2 A1 R% Q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
$ X& D( H" V" `* t7 h        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);! l  m. ^8 M( o: `8 m7 T5 m- w
% Z( A( Z/ U; g0 K+ s' S4 d
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);0 `3 [5 h$ k. a- k
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
0 m3 x, `$ Z% H! K, I! J4 I
5 n+ J2 X1 c1 J# ^/ K6 E* K- c}2 Z6 i2 c+ c+ z! q  c
6 R% {' U' E/ N# _7 w+ w  k
6 Q- t& p: D& \2 l+ R6 n
static void ad7606_busy_hwi(UArg ad_addr) {
& g" R6 e2 ?) _+ |! ?6 q& \- m, W
+ ]" _9 W. y0 w8 S/ |8 y" e* K" n! P( Y% w: B" `
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
: K  P0 o5 g. s' w, c: j        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
. o5 G* T, V! H; z: ~3 x3 S7 B: T0 u$ U6 [  J
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
7 {' s) f. K6 {( n4 h) X        {3 O4 U% D5 J4 ~6 O! y
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。4 S7 Z& F3 |4 L2 o" A1 o2 I
                cs_addr = SOC_EMIFA_CS5_ADDR ;
2 q) C* v1 [) ^8 u" T- P                internal = 0 ;; ^- [) p6 Z- g5 Q* q1 L) J4 U+ _
                int_flag[0] = 1 ;
& c0 w$ z0 m' q" y! Y4 d; D        }. v5 K& Y. o- I+ Q  b
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
+ [0 `# m0 a& o7 ~        {
/ A. }* t) r* [& K# `; J) z                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
  }3 l/ x$ z- i% N                cs_addr = SOC_EMIFA_CS4_ADDR ;
$ W5 f- K1 j( H9 a8 `& s% ?                internal = 6 ;
7 F% ~. W/ x" x: H! `, V. ~                int_flag[1] = 1 ;
2 V' W) |0 y" O& H- x1 r        }
% H& |, C5 ~$ |4 w1 Y7 r; Z        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)- |9 w: a  V- T6 x# x. a2 P$ r. g5 \
        {
9 E/ s& E& Y, D) u; ~  W  r                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
$ c4 D1 ]3 |+ O                cs_addr = SOC_EMIFA_CS2_ADDR ;
6 `8 B2 P: E/ q7 i) b) P. L                internal = 12 ;
" _2 o7 u0 ]! L* L+ L& ^                int_flag[2] = 1 ;
  J' P; D; i: l: H        }: Z4 B7 g) L, _
  
  q& B, v. J8 i5 `  A. {8 g        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
& F- V. v7 b- {# c      
5 M$ E! g9 ]& @        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
) g4 ]! S% M* v' M4 @& O: J}
; j4 C0 x0 K5 a; C  L. W
+ S. y/ M' F. Q( N5 R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
2 C* A5 j/ Y8 W
4 U1 s9 K$ O: D$ j

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 09:27 , Processed in 0.042315 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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