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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:; l! V% `" H7 u4 n: J+ \/ X3 v
#define AD7606_PAR_BUSY_GPIO_BANK        5
% Y4 c- Y/ b. x0 g( I+ X; P#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT. n/ B& h/ X8 _0 M# Y
: o5 y) p! M( t- U
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
  M0 p% L  D; n) ?9 w# b( a#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
1 Z! J' |; w, U' @0 z) ~/ a5 [# a#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
$ \/ }% o/ d" G3 C! O/ k; E6 L#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)  g. @$ W4 Q- t
3 |) a3 D7 [/ H* K$ q$ G$ V. Q
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
8 b/ ]8 e7 e9 ~8 J$ I) k# r3 z#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2). Q' r) e5 K: o, N  Y% T- [" V
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
# W; @; w* }$ n9 V! N( n$ Y9 z$ T/ y4 X, q
- G9 r- o; z7 l& w: D" V

% w3 Z  |- ?1 B$ {' i- [3 Wstatic void ad7606_irq_setup(ad7606 *ad) {
1 {* P, |# h$ ^; h8 x        Hwi_Params hwiParams;
( a- F' j! E2 Y) d        Hwi_Handle myHwi;8 v2 E1 ?6 v: @6 E
        Error_Block eb;
9 i" Z7 S! D- T
5 G% F. d! z: P9 e- Q& @        Error_init(&eb);. P0 c+ d5 G& N2 K, q
        Hwi_Params_init(&hwiParams);
4 @3 D" W' p1 M/ k        hwiParams.arg = (unsigned int)ad;. ]; k6 s: ~. v; I( Z
        hwiParams.enableInt = FALSE;
# V4 c* Q. r9 B& n( f        hwiParams.eventId = SYS_INT_GPIO_B5INT;" Y" P8 ]. z6 k( h% d2 F+ W
        hwiParams.priority = 4;4 f2 ]- _% B2 k' o
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数, u1 `4 p3 k' w2 V& @
        if (myHwi == NULL)
$ V0 r$ ?; ]' [, b. R        LOG_FATAL("failed to create hwi");6 x4 \$ F, B! X
+ H$ q& o0 U2 ?! c( b1 t4 D6 a7 @
        /* enable both interrupts */
4 _8 m7 [+ N/ p+ r7 w        Hwi_enableInterrupt(ad->irq_event);
# [7 ]& _* ?3 O- q; x9 a) y- F}' k3 y3 s6 c- y7 {% }( e

3 k# ]5 e) i& x1 ~, Z% M  F* R5 W) N( G
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {- v, G6 L% q$ \% j- `8 [* W
        volatile unsigned int savePinMux = 0;
$ o; ~8 C  e9 f& H& ]        //初始化5.11、5.9 、 5.5为GPIO口( w% g1 g5 H1 R6 q4 E
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
8 l* W- }% H$ N/ e/ m# j5 p2 r% K2 k- A/ g$ [3 D
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);% Y: F& M  w  Y2 T
0 D7 S2 H/ g. [" R0 E3 R" J" b
        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));! M& q5 U/ ]) L* r4 h- K
+ g9 R8 N7 V+ p  N# z
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
7 a1 C3 t" o6 h( O% x8 T$ O3 h# k
, H1 x' e- p# Z  T% p( J! x2 t! G6 w) Q}
8 d& |7 y. G4 a; J3 }' [" w5 @  i
4 ]9 i/ w5 U/ o. z7 _- [8 C# B$ b
static void ad7606_gpio_setup(ad7606 *ad) {- X0 K' G: e" g% t- ~* N
        /*Set the AD7606_PAR_BUSY to the input mode*/
6 e/ z. i; K3 s# V* c* g' F! S        //初始化5.11、5.9 、 5.5为中断口
6 X& V' z( [7 t; A' h; P4 g' r! v) Z; C        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
7 h! J: {/ D+ w, l1 C" P        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);; \4 c2 D+ c6 c; v5 C1 L# n( d4 c: s
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);! M$ j( C; [7 d
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
, ]5 \4 P- r& ]3 S        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
" U( j4 i; y1 A8 c( Q        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
/ H8 a2 x; ?& l        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
( _. g! t1 ^* D. T/ ^  n' h' {5 O        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
! L2 h% U6 e/ @0 p+ S4 d- g# ]/ a        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
" J# K! O6 H0 f7 U8 \        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
4 I: s& ?% Q+ m# B! U        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);/ g) u, W8 M( q8 b* z

# B+ c, ]4 g! V        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);$ C( Y* B4 d1 n. Y, f; z: v, v2 \9 T" L
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);/ v7 K0 ~  ]5 ]
        Task_sleep(1000);
2 S0 }- {9 M5 O, b; o        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
# N1 N9 j0 a3 k2 S. F        Task_sleep(1000);7 Q# E6 i! Q. Y3 Q) U

/ V' O% M9 F* @! H) |" y        /*Set the AD7606_PAR_CONVST to output mode*/( d- H4 u; h: V2 B6 f
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);  f  A( o) i3 `" [  B4 C2 r* x1 b, t
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
3 k* n. e+ w  z% b) @8 t2 v2 r9 d
0 O9 N, @& [' _/ B# c% y& y8 b        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
1 }, P& u9 w# }3 X" H        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);# P/ }% c$ Y- j6 X

9 }! x; P& P+ c4 A: x' |& U}3 Q) F% U8 X' R3 C

+ D! r( d4 H( C: {4 g, E4 g" ?* W3 ?( \/ N8 ]/ R
static void ad7606_busy_hwi(UArg ad_addr) {
( ?7 ~% V$ h0 h& g/ K$ M! S5 B9 s) q2 K0 x0 D' c+ D
& S# A. Y, ?. ?' ^
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/- j! F+ A/ k5 ?* P4 x+ w# L8 [. W' e
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。2 U) v4 b- ^7 r* u" B
" s, d9 q9 t. @) V- K
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)/ z- X. }0 F! i! v0 y2 ?: d
        {" S# p3 ^: y! c6 l: m! k
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。. a3 G, V: h5 x/ m3 y! l. p2 {
                cs_addr = SOC_EMIFA_CS5_ADDR ;1 V! `3 h& U& Y1 H! b, G, y6 k
                internal = 0 ;3 P' k1 p+ R) T( e* n
                int_flag[0] = 1 ;
9 M" j) K8 `" M1 {! b# P" P        }
  o; {7 J4 q5 t: B% D        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND), ^9 N7 N6 d" a' q5 G( @, O
        {
: m3 M: ]; q! q7 \  U' z                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。. W8 P7 O7 d0 d* R
                cs_addr = SOC_EMIFA_CS4_ADDR ;. N  @. H; h+ C! X- N3 z
                internal = 6 ;
7 a( N4 ^. J. J( E$ |* A                int_flag[1] = 1 ;5 d/ `. E& S- x2 n7 }
        }; }  c9 [/ |5 T% `' `8 E
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
% i: N; C) d' M3 [* {        {
5 |; W9 e0 _$ W! |                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。4 j# v4 l7 H, ?& K) u2 m; F
                cs_addr = SOC_EMIFA_CS2_ADDR ;
( T/ d% a1 X, Y                internal = 12 ;
4 x( B5 \% d# P, f* Q# [3 V                int_flag[2] = 1 ;
# ]) k4 R# R: s4 W+ S* ?        }
4 ]# m* C) {) p1 {3 b, J+ X  
( k8 r4 O7 @2 U; _1 P! L  r        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);( F0 V6 w7 ^1 f( p3 c
       " W' r- a* _8 O
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);6 v+ ?0 Z, h5 }/ Y" ~
}9 p- ?; f- d: t; q4 r6 s8 v

0 G- o5 F# [2 U9 w5 N
; t8 o" ]" o0 {, g( T. v2 S5 `9 y, Z  F% C& E0 }% u

4 @3 N( A& R* ]9 |* x- H* w

本帖子中包含更多资源

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

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 08:12 , Processed in 0.043648 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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