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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
& u  f5 L5 f1 m) C#define AD7606_PAR_BUSY_GPIO_BANK        5
! O3 ~( d% t, X. ?7 ?#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT" Q+ M+ i6 t9 p1 s1 _

9 Q6 X# l/ ^* f( \, e# L7 P#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.111 Y# k: e3 Z4 e: d/ L
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
. q3 B  |" ?: }#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5- E4 i1 u" E$ Z7 b
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4); k. S: n7 U, J7 I2 @& n7 O
/ O3 S7 F: O* M; K0 y
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
, k/ O3 N* |# C( l#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
, S, ~/ n6 C" A# t. W  u#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
# S5 ?0 I9 d8 k! a0 U# N
( t  u1 d8 r; @- r) s, W$ E8 z( E) q; F

7 K  F4 f1 p% tstatic void ad7606_irq_setup(ad7606 *ad) {
# P8 K, w6 n( S1 G% C; Z& ?        Hwi_Params hwiParams;$ T# R9 k- k  X' x5 V6 Q) b. F
        Hwi_Handle myHwi;- I/ o2 u8 s* u' f
        Error_Block eb;
$ i/ R( @9 l5 v$ N+ }/ w" O* s4 j; i, t$ W' Y% B2 h
        Error_init(&eb);
0 ?/ ~9 ^) ?/ b        Hwi_Params_init(&hwiParams);" F% b& A7 N9 C6 c9 |
        hwiParams.arg = (unsigned int)ad;5 S: f' ?) ^! F. E$ z- S2 O: V# l
        hwiParams.enableInt = FALSE;
8 b+ E6 P$ p) N  S4 J* b- y        hwiParams.eventId = SYS_INT_GPIO_B5INT;( V  L+ D& G$ K  C. ~
        hwiParams.priority = 4;
3 G7 f' U) {' U- m- G        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数  w1 E3 _. l9 j8 a7 G
        if (myHwi == NULL)
- H" z" K% I2 L        LOG_FATAL("failed to create hwi");5 Y! a! P* @9 R* A& E5 D2 F! S
5 a! F  V. Y/ M
        /* enable both interrupts */6 k4 ?  b1 }1 \1 \
        Hwi_enableInterrupt(ad->irq_event);
, s3 l8 D  @! ]8 ~+ n+ g}
, M( J* C& D, E: d/ ^: S
( \9 h5 Y- w9 _) o9 U" V8 f1 P0 Y+ \; Q( o
- u! p8 ]) m( Ustatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
9 ]7 ^  t& w6 ^# c3 o" ~: Z        volatile unsigned int savePinMux = 0;
. A* ]- |/ F& E0 T" i# s        //初始化5.11、5.9 、 5.5为GPIO口
$ @+ n7 N) I% ~2 b        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));8 ?  z& C- n9 N8 B1 A3 H
; }5 ~( f2 V- t9 x  t- m5 c
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);9 w0 L% x9 s0 t2 ~( q4 r

: @  }6 }/ k, [& e4 f        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));+ _& n/ o- A+ r; m9 Q/ l

: n) g' _4 A! J- D7 `- l( ~" t* j        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);: S: D) ]1 q! Z

) s6 J6 o2 j& V}& a) f2 y4 o8 w+ G
7 o/ V* ^& d$ X, _5 B& M
5 g# t9 _: ?% O% t. N
static void ad7606_gpio_setup(ad7606 *ad) {
/ n* y& y# Q5 |9 {. r0 ^6 J        /*Set the AD7606_PAR_BUSY to the input mode*/
$ y! y* A; h# A% Z% L        //初始化5.11、5.9 、 5.5为中断口1 z$ B; C1 N/ x4 |$ L3 r7 `5 s! Z  {
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
9 I  k" z% l, M" X9 r" {        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
7 A( s# ]; W5 p        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
& a; F2 O6 D! S4 V        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);2 d1 }1 r+ f7 J" N
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
* X4 k, @8 i0 D- t1 ]' k: _        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
. E8 }5 w7 E. g$ {+ [6 x        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
: t! w: a* Y* {% a        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);3 o5 N. b! ?+ y7 |
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
; A! v' e/ P; d/ M6 h, w$ {        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
5 r' E" Q4 N0 V2 T* _. t( C* A" v        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
8 P3 B0 @3 ^% A3 J; p3 f- e
# q, E* C. o( H) N2 N$ b; H        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);, x$ {/ p3 G6 w, ?1 p. a
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);' O; \* w- Z  d4 u- r
        Task_sleep(1000);
% w+ U% x' f3 \        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);3 Y; X3 C0 G0 p6 ]3 l; h$ c% t, y0 |
        Task_sleep(1000);$ B: V, h: U. t. f) d2 Y' Q3 }

% Q  I' X+ {( J        /*Set the AD7606_PAR_CONVST to output mode*/" |( P4 C1 W' l0 G
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
0 F7 b6 l# o& d' B3 _, U5 D/ e        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);. j5 w# A$ G+ W7 I7 K3 o, X

0 O3 R4 W6 V& S6 m2 k        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
" D( T' {  n" o1 o1 k, W        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);6 n# ]1 L" Y3 w: H
( J  S. \7 b) U7 R
}# @1 S( J8 z. P

) m8 o, P5 [$ e
. E! n. U6 [- a; zstatic void ad7606_busy_hwi(UArg ad_addr) {
) ^, g/ }/ I' g' v. @6 ?: |
5 b; j( _/ d1 r9 P7 Z7 h! V$ O3 O' K* }
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
0 F3 n5 c! X# s& Q9 c" h        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。$ j8 X7 ?2 Y& M0 A) h: ~2 i" G" B

9 x* u+ W4 M& I) ?$ z, Q; ^7 q        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
7 \3 ~% L3 c- j- ]        {
& {( e! K  \) R                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。. v* i* B4 ?6 K2 l
                cs_addr = SOC_EMIFA_CS5_ADDR ;
2 a7 W$ c' R. f# G- {! m, J                internal = 0 ;4 e, r6 a  ]# S* g3 e
                int_flag[0] = 1 ;
3 A5 e0 W2 L) L4 \        }  p$ `/ h; c2 V! x
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)" s; {* z6 p3 Y% E7 F7 X
        {* k( \: w& j* G% K! h9 f$ k/ r
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。3 [. d, d- Y+ f# n! \
                cs_addr = SOC_EMIFA_CS4_ADDR ;2 f7 F  D% j9 T4 K+ ~$ P+ l& t- ~
                internal = 6 ;
! ^2 n' L2 i" |" g5 g                int_flag[1] = 1 ;
7 a9 l9 a: Q/ e3 O1 L        }) F  v5 G, ~' o
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
6 ~4 P" {+ [" R! z& l# h        {
: K- p8 T! Y* |' F                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
- w4 s3 J* V& ]0 H7 C                cs_addr = SOC_EMIFA_CS2_ADDR ;
, f: Z. }( w% Y$ X" r                internal = 12 ;
$ o) _% T5 t" l: {                int_flag[2] = 1 ;  `% ~/ F' E' Q: y2 z  j
        }# v& j4 }8 \8 V) p! q! o1 [
  9 S+ I/ ], ~0 p1 J
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
( s9 K9 S( ?  i& d1 h0 [      
; l7 i: H! j) T: A1 S5 M+ S7 `! T        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);- q- h+ M9 ]% r( K$ I0 T
}. F$ E3 _$ W! J, T
+ Z, S' |: _( z- M. l+ s

5 I% E* i& K6 i1 U+ k9 m9 i/ ]' N  t. W% g" \, Q8 z
6 j# T/ [# J1 C  [: M+ k

本帖子中包含更多资源

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

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-12-16 02:15 , Processed in 0.040612 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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