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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:6 I2 V* F1 _" K+ w/ b% H
#define AD7606_PAR_BUSY_GPIO_BANK        5
) a- V/ Z; S2 L; C; L: b7 \$ `#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT# {5 o! p: n4 Y+ i$ V  V

7 _0 J4 H3 Y* a: N8 U1 C7 n$ A#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
8 g- e( x$ L* Q" E/ d#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
, U! S* o9 ~! n) H#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
8 r& R2 V. n4 w! p& O: ~#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
" }) C) y8 x/ u& ~5 b6 q
- ?2 h/ \. T" S  t7 p( r#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)* {3 F: S# b; ]  z; }6 e
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
/ m: l- V) E8 z) o; A' P#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)6 ~1 Q, _! B7 ?

# r. E1 O* G" E
% Y* ~4 e0 y4 ^' A6 U+ r
3 e, O  w  K% P- Gstatic void ad7606_irq_setup(ad7606 *ad) {& b! B; J! u; J
        Hwi_Params hwiParams;' \8 \7 v% A* N
        Hwi_Handle myHwi;
* D+ o2 r$ f1 _) K        Error_Block eb;
0 T# j. ~! \& N# U1 ~
5 j7 k" u+ \7 g: D* j; g( r        Error_init(&eb);: T6 j; ~2 ~1 P- [, H
        Hwi_Params_init(&hwiParams);8 ?: l2 m7 d$ s* G/ x+ p3 o
        hwiParams.arg = (unsigned int)ad;
' Y1 i0 z- T6 Y& S- W0 o8 r        hwiParams.enableInt = FALSE;
* x# j/ Y  w5 x3 t5 w        hwiParams.eventId = SYS_INT_GPIO_B5INT;
  E4 `, ?3 b1 c$ V        hwiParams.priority = 4;8 G) V, e" p7 x
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数( }) _+ f3 d  m% v8 a7 s
        if (myHwi == NULL) 0 M* E# ^" u$ A7 [. _, q
        LOG_FATAL("failed to create hwi");
0 S* _& v+ U8 \
8 O. A; Y% b  J5 H8 @$ z0 J) Q        /* enable both interrupts */1 y' M8 `1 s1 B
        Hwi_enableInterrupt(ad->irq_event);
) M( o% X4 ~9 u. N}
1 G( X/ |% b: J9 I) {
: f5 I5 _. f6 A* [
8 _6 M, q/ h1 Dstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {0 D& u- v* r1 ^5 A* A& ]
        volatile unsigned int savePinMux = 0;
6 K8 n( p) y2 Y9 m5 Q. T        //初始化5.11、5.9 、 5.5为GPIO口
9 }& ~) M: W7 J5 ?+ K5 g/ x$ o/ ~        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
/ X" ]1 G8 n% a. b" ^" k- s: m3 L% w
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);! e0 g  V5 T; X! k

9 u" `0 z) s0 S2 @3 X( h2 \        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));- [: X1 V; \1 K# I1 s& t

5 c  Y6 D+ M1 t) f; \        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
1 P; V$ x8 o  B  k. M2 n4 e1 m% R  \: I8 N& `
}8 X0 Q, G) y: j8 \0 K& @
- I7 l( ]$ a6 [- v9 z
5 m3 I( S4 G" w$ t
static void ad7606_gpio_setup(ad7606 *ad) {
' K, w6 Q( B2 j1 ^6 v; d        /*Set the AD7606_PAR_BUSY to the input mode*/
9 g1 a  n  o6 E! p        //初始化5.11、5.9 、 5.5为中断口" r7 i' l4 ^+ S* b: Y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);- E8 Q/ e5 V/ R$ Z% Z
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);& F6 Y1 {5 y. c! g5 ?
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
9 L6 j" p1 V$ T9 A4 d        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
% F4 }1 Z+ z: ~$ v7 Q( r: ?        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
/ P# G8 q1 m" F, F6 n: m        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);4 `( c6 [4 P# c6 D& Q8 N
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
' d* {) C7 O- ?* G* q' M        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
1 ?4 z5 k: B# ~2 D, j( u        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);2 D" w' L# e3 i
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
0 X$ J: F- i3 g$ v- }2 \0 Z4 }( f        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
6 S& ]1 Q8 I" F4 ?, G+ D( R$ s$ B- b, f
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);$ ?2 I# }' I+ Y/ T/ ]' k$ e
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
/ z" f& k8 w7 }# M% v        Task_sleep(1000);5 P- T9 \4 o! u, j4 X( u% m
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);) S% w% {/ ^6 L1 _3 x. L
        Task_sleep(1000);1 ?$ j/ ^$ p& W3 X! e; ]9 @$ s7 \
7 Y6 R: n7 t- D$ _) `8 D) [
        /*Set the AD7606_PAR_CONVST to output mode*/5 {9 P; E# |% |! I; o2 b* Q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
+ o2 ^4 ?! \. _2 g; o        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
! ]! y, L  m* p: t/ R9 I# m3 h; A' L3 O' E5 T/ w6 n/ T( \
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
- u0 F; g7 a1 p+ h8 i        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
* L" N* `  j# M- r7 ^1 v5 Q3 }- P2 ^! T5 @
}& Q7 d6 ^; I- ^" O

7 _* \5 J; _/ N$ q3 ~
! S" ^; B/ b; B! c: w$ Vstatic void ad7606_busy_hwi(UArg ad_addr) {
4 [7 a2 [7 M: y- h
$ w* C% a' k2 N- ^1 ^& u+ ~$ I# b. K( N/ f2 B9 n2 z7 l3 Y
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/, x3 H- a; s9 J( [, S5 w* ?% {
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。+ g  _$ S2 j. P( {( ~) ^

! h2 p  R9 v6 b/ l        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
+ I. a4 I5 D2 M6 k% q3 ]        {
/ W" e! M: y: W3 x) n& f0 k2 K                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
0 V/ N* @! Q1 @4 |+ Y7 t                cs_addr = SOC_EMIFA_CS5_ADDR ;; B' e7 R0 _. }) J
                internal = 0 ;
) k1 C) i4 L2 M2 ?# y                int_flag[0] = 1 ;& X, Z3 X/ e5 l# m# W' d
        }
) y1 G3 O% e+ i2 A        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
  V4 P) P9 |4 \+ [" O+ S0 o1 W. S3 l" Y        {$ L/ G. ]- o- o" ~
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
, Q6 J, S! @! N) ?                cs_addr = SOC_EMIFA_CS4_ADDR ;
7 d  Q1 n/ ?. o% A. E                internal = 6 ;
5 K- v9 F, ]; o+ w1 O1 X7 x" p                int_flag[1] = 1 ;4 a4 q) T2 h+ X! v" a1 _
        }. R) x, R' K1 b' r- M& _+ X3 E% n. Q# X
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
8 N' N5 A- i! L  R7 A        {
7 H- w1 b* {  R; E$ Z                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
' Y9 Q9 l4 ?/ m  g6 Q                cs_addr = SOC_EMIFA_CS2_ADDR ;
7 {) |+ W6 n& ^                internal = 12 ;, {5 X  M0 h5 L! B1 m7 H) X0 J
                int_flag[2] = 1 ;1 P+ x1 L6 V: [/ m8 U
        }0 h3 ^! L6 A' p& m6 t7 b
  
1 V- J( A3 {+ y% G, ~. @6 q        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);! c4 U  ?. }- M( `' B! V% O
       - I0 a; h, u* S6 R' T2 S  c( ^
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
( |8 w# P4 R. U/ j8 A}
0 r/ o/ g9 l/ \% h5 @7 Y  |1 N, J  j- a3 M" w: a( H7 ^4 |
5 @: X% H( W3 j6 }+ [! L. G) ^7 g

/ C2 z; F3 O5 h6 L9 G2 p+ x* F  F7 P9 n3 {. Y1 V& v

本帖子中包含更多资源

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

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-15 02:29 , Processed in 0.040018 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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