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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:% i* j3 D/ N4 s) S4 \2 A" T& u
#define AD7606_PAR_BUSY_GPIO_BANK        5! k6 w" x' d+ z2 B2 q# o( s) k
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT* _# Z+ W3 Q9 e

8 C6 _( P" A/ h#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
7 \5 \) C: T( b. p% ^5 b: s#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
6 l7 x+ ]! L5 H#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5  V0 k1 w, j+ R! K
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)2 L! ?- n' H: o1 ?& `6 Y
* T3 E' S9 V/ V6 s
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)0 C2 A. J# a( u& q
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
3 p/ r: e9 k: Z/ o9 h#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)8 Q1 i  h. k# [1 U5 Y
5 |$ [+ W9 V4 H) B4 U2 m
0 [% M9 c: n; k5 X& ]; \

& G* m# O& S, {6 e+ u2 ^: K) A  d" Rstatic void ad7606_irq_setup(ad7606 *ad) {( C1 E, p4 \7 b7 C' P% k6 }% U6 F9 x
        Hwi_Params hwiParams;+ D2 Y; T9 P8 ^! `0 u2 z& u
        Hwi_Handle myHwi;
6 ~" }3 N  ^+ K$ d        Error_Block eb;
9 E6 ?# F  [/ p5 ]5 D, o6 k# h% Z  f5 ~- u, ^; t& g6 i9 [
        Error_init(&eb);+ G0 g1 |8 [7 d3 ?/ ~; n  {8 D4 N
        Hwi_Params_init(&hwiParams);$ l* t( p9 \: |1 [
        hwiParams.arg = (unsigned int)ad;
9 |4 q* w8 e$ j: ?  _. Z        hwiParams.enableInt = FALSE;
: Q1 Q& S. ]3 h, r( p6 ]        hwiParams.eventId = SYS_INT_GPIO_B5INT;
5 t5 e3 S5 z* M$ [% A/ {  E  @5 C) }        hwiParams.priority = 4;/ [. q2 Q8 S/ X4 ]3 E
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数# Z; D( W6 m, `' b0 e; F/ i5 F5 h
        if (myHwi == NULL) + _5 B0 e2 O/ D/ `
        LOG_FATAL("failed to create hwi");
7 e  J% @2 s5 t- g
" g: f8 B& I, u& [* @        /* enable both interrupts */
5 R3 z* r# n2 A$ e        Hwi_enableInterrupt(ad->irq_event);
8 u/ Y* M0 ?4 U( Q# P% \7 u}1 w( w5 `' \) \4 d$ i# F

% h' m3 g. f9 e: F- `* N: ~8 l) ^8 c# b, Q# Q2 Z* ^& `
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {. A- I* |" y5 |
        volatile unsigned int savePinMux = 0;
+ d) U6 o6 U/ Q( R# E6 z        //初始化5.11、5.9 、 5.5为GPIO口
7 |/ ]9 G9 i" y        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
- }, M0 s8 H: U6 o5 v# [3 T7 ~: l- Q6 \- r9 C9 t+ f& E$ P
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
, K' Q5 v) {4 [3 j0 n$ q. K# [) X9 e4 h' j
        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));
" j; M6 p" k% D% T& @: D) _7 I6 r7 P6 r5 v2 c# E
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
( y' V& A/ o- \; ]2 ]
. O  k" o, @" x/ S2 T}
/ s* x$ a$ J  S* q
0 m# s. m! `6 p
' G7 B  f- s% h3 M/ c, \0 Zstatic void ad7606_gpio_setup(ad7606 *ad) {
7 @  e8 V5 L: }$ M2 O. r        /*Set the AD7606_PAR_BUSY to the input mode*/* K7 f+ k3 Z6 y5 S/ _
        //初始化5.11、5.9 、 5.5为中断口
( j$ I, {/ C. r$ A- y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);" f0 y0 a+ P5 r5 z
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
3 ^' F9 }; T3 Q7 n2 _        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);. k9 ?1 l5 q( Q+ n
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);+ j4 Q- M. Q8 {
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
1 ~0 L4 a! |' k& _* B+ I  H        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);. Y  z$ H! k4 O& H9 R0 _5 \
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);8 Q8 _5 n1 C' h
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);# X& c* q+ z6 _. j
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);: @; ]" u6 S! I3 p
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/# N9 z6 j! \& p
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
& F3 w0 O1 Y# }# p8 c
, G7 ^& h: D+ S1 g- o4 ^        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);3 D  ]% g3 m7 y. J  W+ l% K
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);0 e, _  x' q6 t; b% X7 A
        Task_sleep(1000);
5 i* R5 p* [, v) d7 m  q        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
- Z. g/ E. c* H0 n0 |" w        Task_sleep(1000);
! j6 S3 _' \$ l6 F" k. m2 ?% F* h( n. g  U
        /*Set the AD7606_PAR_CONVST to output mode*/
5 K% a8 \0 U' L) K$ `* ~        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);. o; c! t/ ~6 {- Z! r3 D$ P3 |4 r
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);; J+ n  F4 ?* J) O$ O

2 b% B! D5 L: n5 C( h        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);' u; r, z% O6 ~
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
7 r1 h& ?# |. W) h3 b4 [! c1 l! d- C7 J2 H1 q; f/ f8 D7 l
}+ k0 V' S* }- e$ s
% z1 N6 A) I* j9 y0 j

: r/ K. m# s0 ~5 ]static void ad7606_busy_hwi(UArg ad_addr) {& z% a1 p7 N$ n+ d* F- z

/ ^: Y5 J1 }9 v" W. Y
/ l" v* Q3 I! }2 k7 C) J- E1 _        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
, x3 V& u  T, @* T! \0 c  y$ {: L        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
0 E$ n. M9 M1 D
0 J# B2 D% M# o2 }% w9 @: F3 G. U        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
  u% w* Q0 u8 e* J  `        {
7 h! B. j, _4 H! T2 N! Q7 z& c                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
+ C: k6 ?$ z) d. t( {- ~                cs_addr = SOC_EMIFA_CS5_ADDR ;
, s7 m8 W5 n/ ?! d" E2 a                internal = 0 ;
$ w: n/ [9 [" ]/ R7 u5 G0 ?. B" h                int_flag[0] = 1 ;
/ `$ d! r0 M# Q3 v+ I0 f8 e        }
3 m! D8 }: D3 C+ l. h+ M8 s        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
/ A% \7 E0 x/ X5 }8 x4 O: _        {! z7 A/ ~" `1 }+ j& J
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
7 C, r" g& r- @5 X; z9 T                cs_addr = SOC_EMIFA_CS4_ADDR ;
. X) Y2 k. I) {/ c) o# E                internal = 6 ;" c& |" x& K5 B9 q1 J3 i1 Z
                int_flag[1] = 1 ;# |0 ?; e* [& a5 a8 D0 d5 W
        }
  i2 u" G# I* p* E        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)3 R/ z6 w5 C8 ]: n+ C+ s% @
        {
- p9 n2 ^/ h, l; W0 x8 D7 V; M                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
  C! H. _7 K- ~3 l) N                cs_addr = SOC_EMIFA_CS2_ADDR ;0 a% v9 O$ b+ S$ F' C8 Q
                internal = 12 ;
# C! s8 p! Y* V* i- T1 p4 y7 {                int_flag[2] = 1 ;
' E+ C& v3 x9 X        }
' J+ Z' @5 ~, [0 w& w. k  
9 T6 ?. ]" i# J# n$ |        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);/ l! Y1 `& K! E# s! a5 V' e
      
5 @# [$ A, l: i        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);4 Q1 K* K5 L; k$ Y" t8 |$ M
}
2 P  e& V7 }& q1 L7 J! ~; V' m% `3 P1 V9 ]5 K+ p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图% S# M) W% F4 Z7 n; L

$ ~# s" s! Y8 `

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-4-30 15:19 , Processed in 0.042130 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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