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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:& z9 i& @) [2 h1 |1 ]' x
#define AD7606_PAR_BUSY_GPIO_BANK        5
5 w0 V% l' H8 e( C3 @2 L: L# M#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
3 K3 R* t* W( \; ?. d- L! f- k6 N* N8 L# t$ }- G- N' W
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
/ u# {* D9 F- f/ j#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
) Y" O: H" M6 V; v7 z#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
  x8 n* o, n1 N. {! Y#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
9 c  U, L2 x0 m5 ]1 @
  {5 p4 D3 I/ _; C( _0 ]5 P#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1): H8 H- h+ p0 \, L( y
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)5 ]; |2 n3 Z8 C$ a0 t- T
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
! y3 ~* T' D+ y. X# Q& }6 p8 |" V8 E/ b! M1 Q9 [

. ~. {3 |% C" j9 R- P! p5 J" }1 \1 r% ?  Z$ h
static void ad7606_irq_setup(ad7606 *ad) {" J. F# s; r# E) _' G
        Hwi_Params hwiParams;
8 ]" ^$ b- a+ Z- X& S( @. ^% N        Hwi_Handle myHwi;# s! @: n! O5 w8 e* i" \
        Error_Block eb;
& [7 @* A# p" N) y, O$ f' [
& q  P3 Q$ \9 L' F+ p" p9 s        Error_init(&eb);; g- y8 f/ h) E
        Hwi_Params_init(&hwiParams);3 H# v- U6 Q# L! @# Z
        hwiParams.arg = (unsigned int)ad;+ j) W5 \" K+ J' k' S
        hwiParams.enableInt = FALSE;1 z7 T( Z/ a; H) L. |1 e) F- ]" m
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
  l7 P' v# j$ k, d, D7 i        hwiParams.priority = 4;, O, B" C" i- F9 i6 j
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数7 X7 c; v$ |9 @7 ~1 [* ~0 D( f
        if (myHwi == NULL)
- H6 ~2 z( w+ g9 _3 C        LOG_FATAL("failed to create hwi");
4 {9 k9 o+ [# l# F8 T
) v# s( D  c1 M- n, U, }  p* Y5 g        /* enable both interrupts */2 W* k3 z9 S3 i: U. |7 x
        Hwi_enableInterrupt(ad->irq_event);5 `+ o( X; h$ {( O* B$ n
}
; M  a# A5 W7 t, F7 P4 K/ i: h' a4 o- g
8 ]- H5 G  v0 G8 e! Z
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {! j( Q  I/ u' y$ y
        volatile unsigned int savePinMux = 0;
- Q% }$ e- C  t5 U, Y* U        //初始化5.11、5.9 、 5.5为GPIO口, ?: B# W) m! |# g4 N: ]; F8 ?
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
/ L0 Q3 k- L0 [8 m) B8 t9 p6 a" s6 Q- ^
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);8 ]6 R, f+ o3 D" L, p3 t5 @$ s6 x; S% [2 ~

% j+ g6 D" Y+ r4 X        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));
4 G# Y8 r; \% @8 G! r0 L; ]6 b/ v  i9 z1 B
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);( p2 Q1 s. s, J4 Q
" S) |% Q! C* n; k2 X( p' G1 w
}
. G- Y( u5 D/ O. B5 y- p4 e) O5 p$ V3 N

3 J9 {+ a1 I/ s2 W$ a, n0 pstatic void ad7606_gpio_setup(ad7606 *ad) {  j: S8 E0 y# C) t  m
        /*Set the AD7606_PAR_BUSY to the input mode*/
0 m8 K4 n8 p9 z0 C! ?. g4 b" ?        //初始化5.11、5.9 、 5.5为中断口! x1 P0 J, E* ?4 O- b
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);$ I. o7 W/ V( M6 D! c" P9 b& m
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
. E  X% ?( \9 n" Y7 ^        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);  l" q% @8 |$ M4 s& F
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);* g5 [8 [8 p  e4 }
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
1 M9 ^: E4 ?8 r5 h: \, o        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);3 x' J. t9 x! Q; c5 g5 J. V
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
! o$ V/ J5 Z. I" }4 x        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);8 b1 X. i" E- {4 A2 m
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);" q6 w. A4 C( {3 L3 k- X3 Q
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
% l$ ]& [' }2 `) i4 j  v! p2 |        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
1 N' Q# f& r  r6 _4 o3 v) F2 m" ~1 o  B* B5 k7 q7 T
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);4 y% d1 O. \0 r% @# c, V
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);) x; S  ?  j, I" p) A3 D
        Task_sleep(1000);
& }4 L, p8 @0 q# j        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);& @" V+ H" H, m( {# t8 A  u+ s
        Task_sleep(1000);, F8 ^6 \" ]+ |* P1 M/ `! d7 Y

/ F  e( y2 N7 p! S* I8 [        /*Set the AD7606_PAR_CONVST to output mode*/! V* w; Q: J( B* z/ |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
) b7 o2 M8 l. ?% `- J        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
4 ]. Z, U& |/ n4 V$ y$ s1 W6 u& J: i9 G, M
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);; g0 M; C& J8 y2 G
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
% X3 x+ ?1 G6 U0 i6 X3 t- e. W
- f% a9 ^& n4 ~. ~* F1 d7 A0 m2 G5 J+ V}
* ]9 M" H2 Y- E% o2 o: T/ J& s, v. }3 Z0 M

+ g. l2 K% q  h9 v% O) Estatic void ad7606_busy_hwi(UArg ad_addr) {5 m+ j- ?7 X: T" l9 R9 J
0 T! @6 I" w7 s

0 M0 Y; ^# K# j& H: g. \) F        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
" Y5 u' v; e. T! B; G        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。+ O  W- [1 v2 A6 o
8 b& q" U5 d0 n* o& L! }6 U
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND). n. z- ?7 K+ N3 T, `
        {
6 s* p  L0 _# H4 \                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
& k: q% v) R0 m* \9 v" ?                cs_addr = SOC_EMIFA_CS5_ADDR ;
' }8 u4 x. i/ b& [' r$ m                internal = 0 ;  o5 Y, L; {1 r
                int_flag[0] = 1 ;
8 @' A2 ?; G3 r9 C        }
2 A3 V  v+ Z* w) m$ m& D4 E1 u        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND); h- D: ?5 c- d$ K" R$ L
        {. o$ g. k9 K) [1 @4 U' u* d! G
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。0 d( u3 {2 c& Q9 b
                cs_addr = SOC_EMIFA_CS4_ADDR ;
& J6 K& g" f8 j5 d7 w( j5 n                internal = 6 ;
% o! V/ D% L2 R  a9 \                int_flag[1] = 1 ;% L* h& Q  [/ R6 Z+ u1 A
        }+ f# Z( v5 g- D
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)! S% i/ C! \/ y' z: t! Z1 t% i
        {
0 z* c9 ]6 ^$ E2 l- a                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。, \+ I8 u5 S# ]: m
                cs_addr = SOC_EMIFA_CS2_ADDR ;; ]) x% k! I8 @" g& n
                internal = 12 ;6 i: j/ P) Y/ q
                int_flag[2] = 1 ;
- q% W1 k# E$ K/ n( j        }; _0 E% \1 n$ Q, p
  
- G0 j8 ?9 {9 P) X4 w. g3 `  n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);. \4 ^5 s! y& z; [6 q- T
       6 [7 H5 a4 ~+ C2 `
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
$ Z. f4 f! t  Q' w) B1 W}
8 J5 \( B  g  N
8 R; H0 B5 T/ {( y: @- L9 |6 ^. H8 H" t: b/ n5 S: }
7 m+ G# Y5 O8 v* V  a; J8 J% ^

0 t8 `: W& Q/ X5 f7 ^  @

本帖子中包含更多资源

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

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-10-16 14:39 , Processed in 0.040667 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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