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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
( r2 o2 [7 ?0 `) h+ ?' h#define AD7606_PAR_BUSY_GPIO_BANK        5
8 G3 _( o* n5 e* R+ X* f: m#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT3 J: g  U, C: b' ~6 U
5 ^# d. b' I/ f" t* i( [) _
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
! V+ J1 e; H9 a/ n3 x  i#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9& G( P. p9 u2 R8 D
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.53 [6 c+ i8 s) F: z
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)3 s1 f7 s" u5 q3 O/ l! i9 h

# |  w: r( l& A#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)' j/ |0 w7 Y8 @2 K; k$ R
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)/ W: a# u% @6 ~* n8 L
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
& V+ J, \0 b5 i5 }; W# y
! Q: C6 f! d2 A# l& t4 v/ m' I) b) l7 W9 b! P  h

5 w4 l- f/ ]% astatic void ad7606_irq_setup(ad7606 *ad) {+ h8 r. ]  B+ ~. [( [! {) y
        Hwi_Params hwiParams;
% ~! A( B" {9 Q  a        Hwi_Handle myHwi;8 ?3 k) v2 V$ W/ a: B. q
        Error_Block eb;" ?3 `- h  u' X" R1 O
- f" N- U+ T( B
        Error_init(&eb);8 Z) L* M3 [) K5 n4 Z8 z3 e
        Hwi_Params_init(&hwiParams);
7 t' N: t3 E. Q1 q+ E0 m        hwiParams.arg = (unsigned int)ad;7 X  @. W6 N$ u
        hwiParams.enableInt = FALSE;8 I3 _- w* _; R. l% n
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
( M4 c* m' ]; y3 `( J  h6 e        hwiParams.priority = 4;) G: g9 {. m0 d$ P
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数+ M2 Q. ?5 g9 @! B7 D! Y
        if (myHwi == NULL)
& z  E- _! u5 G- u; |        LOG_FATAL("failed to create hwi");& y+ w: |- T' W6 e- W: s( U
2 j0 M, P. [+ X9 N7 H, e3 y
        /* enable both interrupts */& j( N6 p/ }5 y$ a7 T# }: B
        Hwi_enableInterrupt(ad->irq_event);  P' q+ @2 i) q7 T$ f3 W( O& @
}
2 R( [! w0 b  n, V4 f
8 Q( r" n% J. `' V( d& a8 S. U( P" b# E3 J: W7 @2 K+ k
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
0 d1 _7 ?( r1 W8 B        volatile unsigned int savePinMux = 0;" r4 u$ e- b5 u6 e  M# w- b0 U
        //初始化5.11、5.9 、 5.5为GPIO口4 U: y, X& m# ]* J
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
4 u+ D* y! t' m7 E2 e. t; }; Q; \, r. J$ ]& r) u& O
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);. L. X; B3 ~( L5 V; Q$ t% H2 c
6 I- g& A5 B$ e" d6 l. b7 Q  I
        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 g+ E/ x1 g5 f: J. `4 h& Y
2 p# _8 ?( W/ U! m2 S" M        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
- y5 \; z. n& A4 L# s7 O& Z9 _6 i0 x
}
  F; g6 p* s/ P/ l8 [& r8 f+ P1 f( _2 M$ J9 H6 Y
5 J$ Q$ S# b# z; N+ S( N
static void ad7606_gpio_setup(ad7606 *ad) {, k3 a3 d0 [& z* K6 t
        /*Set the AD7606_PAR_BUSY to the input mode*/6 A2 W9 A: w: Y2 p2 T7 ~3 O& _( h
        //初始化5.11、5.9 、 5.5为中断口+ l9 H4 Y+ X- H1 Y7 l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
2 Y; v! y0 Z4 p6 v/ g0 E# `2 }        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
9 d7 N9 G" M. _( v% r  `; n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);  ~. O4 |- O! T" F; |
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
5 n. w, P! ~$ a5 V0 C+ X! B        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
) v) B9 X' R$ d+ R6 N  N- u        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
! Z  D" i5 k/ @        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
# w  G. R8 b' i" |        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);3 C9 D! g( ]6 `
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);3 i9 q2 n+ |( x
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/. s$ d! I: D+ w* R( W
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
- H$ `3 a# t& G/ k" ?: s9 w- }) c3 @- u$ t
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);: w, n2 t5 l" i
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);' z# n0 i( k; q, ~. r1 \" q
        Task_sleep(1000);
! ~, U7 \( j* e- s        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
! b0 g8 j) T: n  e; {        Task_sleep(1000);6 }4 M4 _0 k$ z. m% S& u! {; D
: x9 n6 R+ N/ `8 c
        /*Set the AD7606_PAR_CONVST to output mode*/9 |6 M' a& ~" w- X6 c- U% c
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);* t6 z8 z; `0 E, r4 I& }9 S# h6 {
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);/ x# E1 R% R+ ~1 h% ^# z* v
# b9 |9 s! g0 L6 p6 p
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);* e9 ]1 X6 a& M) f7 N5 D  O
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
) j. _- p5 z4 h8 K  b% c
% s8 _+ s2 \* j' ?}4 |$ A2 @: z1 q1 P

( A# B% {+ r# X6 h& O5 |) u6 q* j
! Z/ _0 q/ I/ e& @static void ad7606_busy_hwi(UArg ad_addr) {- b; e! n, \' I6 p
# F; y1 l1 ~' }8 R0 l' Z# v* r

, j1 _' }% j' r: Y. z' u; U        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/  F# s( [# h2 Y2 X, D: F
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。6 [" e% F6 _# G+ ~, {7 L2 `
3 w6 }5 K5 L( z6 [0 f* }8 O0 }; t8 m
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
% c( x! g& g8 b7 F  K( G( J        {% l3 r: {) ], D& j
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。0 C* v6 b% J6 C- w% I' Z5 n# k; d
                cs_addr = SOC_EMIFA_CS5_ADDR ;& t1 H8 `6 n  s6 O+ e3 E% |- \: J
                internal = 0 ;
/ w- ]' a6 P2 _2 }3 }                int_flag[0] = 1 ;) z: z4 x5 y5 q6 a: p% L3 N
        }
6 p$ N) F* G) ^8 {        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
1 v% v1 N0 p* i. F1 P3 [        {9 i9 E: Y6 A) G6 g
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
- z$ c( ~# L0 m4 y. M1 _                cs_addr = SOC_EMIFA_CS4_ADDR ;
1 X) s; u- t' q, T                internal = 6 ;# _+ N' R! V6 r3 d: ^7 l
                int_flag[1] = 1 ;  ?3 [! K6 Q5 w6 o9 }
        }
' S& o2 K" I/ h: O  m$ A+ X        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)  A% q' \$ n, V$ H& K
        {
; V! x9 e& z0 ?. a4 _                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
% s) V4 ]: r, F: c$ {                cs_addr = SOC_EMIFA_CS2_ADDR ;
) ^. W1 U5 Z1 S3 d! @                internal = 12 ;
* ^" W4 W+ R( P0 R. v" f                int_flag[2] = 1 ;+ p* Z, e, t9 O6 H7 z
        }& Q# F9 v4 N' b2 F* _( N  `6 T
  
9 F3 L& r* z+ O! @" r        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);4 b  h% v* ^$ w& m) \
      
* N9 i. V. l' F        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);# q( E/ E/ i  F- P+ W. Z: I
}1 K$ |: f! k& P

0 l& l& D% v/ h/ E+ d. b0 r6 F7 C' G& U+ \' U
( m5 Q3 R& U  Q

  h8 q. r0 ~6 @2 a

本帖子中包含更多资源

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

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, 2026-1-31 06:43 , Processed in 0.044399 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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