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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
; ~1 S0 l( I) I# Y: P; g6 z#define AD7606_PAR_BUSY_GPIO_BANK        5
% C0 N4 o) C& T3 }, b8 U, i#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT! O2 {$ W, T- ?. G- W

: ^$ J  A9 A7 D8 s9 k2 [% W' d#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11" E1 W, U/ y3 R& @/ F* i
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
3 {3 m8 a5 V- @#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.56 E9 W/ R" r6 n- m( B' ]$ X$ Q
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
: J' s6 k% ?, q$ n- L( c7 R; K- N6 ]; T7 Q$ N2 W) G7 [
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)) Z, a& o$ s  ?$ @$ W1 Q7 E; I& L
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)1 [, A/ s5 n% ?; i3 t3 r) z
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)  T; H' U' I# P# P/ C; Z3 s
+ u! }7 H# }1 b( q3 u

1 _" o- _3 q& D5 w8 J$ i# b
! w3 W1 M3 T- X) J8 e" j; s1 u( f9 Jstatic void ad7606_irq_setup(ad7606 *ad) {1 n0 h$ A# P5 l  d9 S' z0 a
        Hwi_Params hwiParams;
" w& e" S+ {' Y% h3 q& p& E        Hwi_Handle myHwi;. ]# o& A, i" k7 c# U
        Error_Block eb;) c0 u2 b. F  U) ?3 t& z( m6 B# v

+ a7 Y2 o& _' O! N        Error_init(&eb);
& M+ K0 x6 F  i. H        Hwi_Params_init(&hwiParams);5 R; R9 \  @$ [7 g! Q
        hwiParams.arg = (unsigned int)ad;) y/ m! E7 u$ i* Y. z- o# R' _
        hwiParams.enableInt = FALSE;3 U+ Z; }' U4 H3 S- i3 h
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
% a) V" ?( _) O! y; w8 h! Q        hwiParams.priority = 4;
. g+ ^9 Y. D7 I$ q% E  j& s# {        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数) [* x3 u8 i8 \
        if (myHwi == NULL)
% b! z' I0 D/ D8 z+ z3 ]/ o; D3 _        LOG_FATAL("failed to create hwi");
: R. j2 o9 C& M! A) _9 g& c+ Z  }7 T: @, E; O7 L" B: h
        /* enable both interrupts */2 ]& z1 s3 ~  s
        Hwi_enableInterrupt(ad->irq_event);
" Z3 B! I6 `2 j7 b}$ u  W/ |5 W( J2 [2 u

/ s2 T8 \% v5 A5 j  C  r) \5 ]1 W% e( S2 I- S8 A
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
5 Q! h! X+ Z1 C. T2 m        volatile unsigned int savePinMux = 0;
3 n6 N0 D7 O+ o& X# X& g) f- c        //初始化5.11、5.9 、 5.5为GPIO口
9 e  W( {% _% ^/ |* w3 ^5 z# K        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));. a& |* W7 Y- s4 T( c+ T$ D0 L

8 H, j$ s0 g/ e/ M        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);+ e+ X/ r3 c2 _, X0 D

( }9 i& d& F" G/ p3 c4 V5 u        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));3 e  @# R( q: z7 \! j( O
( N$ J" Z7 \  L6 I6 o: j# ]
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
6 A: e5 h) P" r, }$ o6 k, G, p
; n  Z; C2 j, t8 ?# z% R, A}/ s9 ]- I4 |4 V9 \

/ c9 K- j( S, K: G+ j3 B1 _% S7 I0 M4 h) X
static void ad7606_gpio_setup(ad7606 *ad) {
' F! W& C4 {( Z: S        /*Set the AD7606_PAR_BUSY to the input mode*/
/ x" Y& U7 B- t# s8 O        //初始化5.11、5.9 、 5.5为中断口. Q: E2 g" h3 q5 Q+ @( D
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
$ T! l5 D, c4 p3 I( `2 t, ~6 O        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);, j" C; ~( P( w" t; k
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);. [: ?' A3 u) h- j8 I- A$ y
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
8 m- Z, L3 Q+ x" Y1 b2 X9 t        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
( d, V& l, o) S' D& {: f5 Z' j! r        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
! W9 D* h) E( }1 r' u3 }        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
4 [( G% `% R6 j* f) {  ~        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
+ ?2 G3 ]- Y& X& B, N* d* G        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);0 ~: Y! u4 V* K& g% A. s- C5 x9 V; @& A
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
& V0 C5 E, Q% |        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
) A9 j4 ?$ y, T' G# v
: N2 Q, h7 x0 ^  @, X( G6 r+ n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);0 z1 K1 T7 x  ~8 p$ P9 b  k
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);: K7 K6 q. e" {$ I( E4 N1 y
        Task_sleep(1000);
. V9 n. A$ b0 M9 ]% R( u9 R% G        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
  K+ j1 g' S0 L( \: @4 y        Task_sleep(1000);
; E" F) r1 O; A; }) a% J4 ]. X0 I
        /*Set the AD7606_PAR_CONVST to output mode*/
- k& t% k9 B* a- |        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);/ r, R# }* i/ i% c+ `- ]: T. q
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);& _0 g* W( i; c. Y( v% S0 j: h

# o( ^7 ]2 }6 b" N! ?  M7 O        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);  [+ G7 M) @/ w2 M
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
; c" E  e/ I" g! W8 w  |3 H% y% y9 w( X0 Z
}
% X4 X8 t8 m7 z! F9 o2 Y
3 g6 T4 c- z: l$ Q' P- r: D  k9 V* o5 K4 O
static void ad7606_busy_hwi(UArg ad_addr) {
3 X4 @" P# k4 z1 n
) W% Q. o2 e7 n5 X& D
: x. k4 z6 O! U* O: N. V$ a- T' C        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
# F4 G9 s0 U: A5 {0 J3 l        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
! r7 i! m6 X6 d9 a- F7 h- K% G  ~" k' J9 }: P
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
+ p1 |, U2 ~/ i, A6 Y        {
: j, [, Q3 C# u- U+ J& \3 e                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。; F, y8 e0 \: ~3 r" L( P
                cs_addr = SOC_EMIFA_CS5_ADDR ;
1 V- q+ Y2 M; _$ j* |( M5 L( b                internal = 0 ;0 L# _8 ~  V; H( C2 D2 w# n$ P
                int_flag[0] = 1 ;* `" s9 p# f+ m" k! V/ g! A7 s
        }  z' U% H7 m& _6 c6 x1 w( V9 K& c
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)% `9 w1 h6 J6 ]; u
        {% Z# J: I# M1 |8 ~& t5 t
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
/ e: @' ?. R  y" K) F, |/ J) E5 q6 z, ^! d                cs_addr = SOC_EMIFA_CS4_ADDR ;! R8 Q; p+ n( {9 b/ U& |
                internal = 6 ;
& G$ U, N: Y5 ^                int_flag[1] = 1 ;; x/ S. o, j& Z) A( ?, S3 \$ Y
        }- ?, P0 X7 y9 L3 n; a. J
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)  m" o# k! `0 b' h. d
        {
; B: h+ K/ E7 @. e1 y                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
& J9 P7 w  F6 X2 \3 h* h* ~                cs_addr = SOC_EMIFA_CS2_ADDR ;
9 M& U5 W! O+ g                internal = 12 ;6 B4 _- A& u. m+ x8 ^
                int_flag[2] = 1 ;
/ q6 }# S  t# A. Y1 f        }
8 G! e  K& |" D- z  
& s# {$ Q+ J% _        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
6 `, S$ I7 q5 E3 ~2 ?8 m/ N4 u, s" r      
2 ^. c) O* [2 B5 l/ r        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);0 i, R+ K3 B4 E6 ?
}
$ F: D* J; D3 M! p& d3 V! @
/ d. E; s  u  L
! S- `. q) ?4 J0 B8 J8 Y- |* r
2 v) E- N+ |% s  e9 D5 p6 n5 |# ]

本帖子中包含更多资源

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

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-8-4 03:06 , Processed in 0.042734 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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