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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:' U4 X' B; C7 ~$ w3 q4 i
#define AD7606_PAR_BUSY_GPIO_BANK        5; u6 k, B$ e, }% K2 b  k
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT( W" N( B' V* }/ c/ P% l

) o6 R& [: S# p# s3 r" i/ I#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11. c( e" p$ Z( \1 t9 ^. _
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.95 N9 s0 n1 M( \
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
3 X7 L- u. F& S  H4 d1 o9 E, D#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
3 a. ~! }$ x1 Q
% v) e7 Y9 ]9 \7 D6 o% Z#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
/ q# f) y2 s, Y* N#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
' x1 Y8 M5 Z! y; E#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)( _5 g, V1 c2 |0 S3 o& _  L
7 A8 |; G& {4 L
; F. v! j  |7 s% K) G
( N8 J" n* A4 ]+ a% p" Q; S
static void ad7606_irq_setup(ad7606 *ad) {
7 G+ T' Q* m" ?* R0 r. D' w, X        Hwi_Params hwiParams;$ A* d9 y5 t' I6 Z
        Hwi_Handle myHwi;! z/ H; |. l2 V
        Error_Block eb;
: |, _/ o$ d6 ^, L* p: N( h8 ~  ~: M6 S5 h- H  ~5 d4 U
        Error_init(&eb);9 ]; `& a! b  f$ L" \) m
        Hwi_Params_init(&hwiParams);
: f; d3 \# y2 i        hwiParams.arg = (unsigned int)ad;/ ?- K0 ?  k. d4 @3 v: F
        hwiParams.enableInt = FALSE;, [( d! W1 s" Q: f2 V" a
        hwiParams.eventId = SYS_INT_GPIO_B5INT;! y7 Q- P, E- a) F, u6 Q
        hwiParams.priority = 4;5 ?/ s( g' h* [8 A# x
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数! g$ L! O# Q: R5 a, p% m
        if (myHwi == NULL)
! N) D/ ~) D2 T2 j        LOG_FATAL("failed to create hwi");
. }& }7 g9 ^2 A+ u/ n) R- p- n7 D3 b) [6 U
        /* enable both interrupts */
) o+ T0 p# Q$ j: i. ^2 q% @" u' P        Hwi_enableInterrupt(ad->irq_event);5 v4 X" e0 Y- k4 D) i9 S; G& l# I
}
( v' G1 [/ X+ G% Q/ [5 Z) g; }% E6 Y1 s( [  i( g

) _7 Z! {& s! Y$ {5 ]1 istatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
/ d/ v8 H! y$ M3 C        volatile unsigned int savePinMux = 0;
4 ^% T" S9 t) x  k' b4 a3 j, v        //初始化5.11、5.9 、 5.5为GPIO口
" O7 F) B. a9 u' w! f( Y        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));/ R" y- |- y- p4 m: @

; ~- ^  o! F1 W- Z        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
. |# |/ U% u+ a8 z( v- X$ Z
. K9 j& t# V8 y- T+ b% t& 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));8 L# `2 ~. p# h7 N

, S6 D1 L1 ?1 y9 [: S        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
& L) D# A8 c* }$ y
. q& Z! R- W2 f; H}- F8 f8 ?9 L* G5 T

% M1 E' p, U0 z0 H, z' \
( E2 |6 c& ^* Y9 t" f4 v: [( c2 ?static void ad7606_gpio_setup(ad7606 *ad) {# N2 P2 \, p; |$ w
        /*Set the AD7606_PAR_BUSY to the input mode*/2 M) [( w5 v' Q; W9 ?
        //初始化5.11、5.9 、 5.5为中断口
) v4 N! `/ {' N/ o        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);  r6 |3 [, v+ X
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);; l3 e' R1 c9 E+ \% ~+ g& t
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);. J$ K2 g! B1 \" _2 C
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
8 Q- Z& E0 D) V4 y        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
  ~9 l7 u$ w9 a# l) b        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
. Q# ~7 O0 H4 c$ }8 q' s        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);2 X9 Q' l3 K# `  {6 x. S% a/ V* x
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);* ^; h' ?) Z+ V# _# E
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
8 k% p( |- L7 v: d1 c        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/2 H: p) h- C4 u+ K: C/ x9 U9 p
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);8 `% W, A  l# L4 z  J( N9 U5 Y

- ]' v$ j" \9 f; [        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);1 y! z! {( v: L
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);; L# r* m2 L) p2 y! A' q. X
        Task_sleep(1000);* H' g7 U+ h' i* z5 {+ g  u. p
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
& c$ Z0 C# Y3 q4 x+ @        Task_sleep(1000);" o$ W+ I: R% I( |

: M. |+ _7 K6 G% l. v! O( ?0 J6 m8 I        /*Set the AD7606_PAR_CONVST to output mode*/
; h* C! }& F3 o; M# c        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
  Q- L! s* _( F: `        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);4 h  K/ ], i1 ^2 x& ?
& a  m& b) w+ R  Y: Z& }
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);. C0 i1 i6 Z/ E2 e$ {
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
. L$ V: Q5 @% f2 A/ M! ]) R( Z0 O* H* v, |  \$ ?
}
  n  B. P8 f" o( w5 X7 ]
, U7 @) s# O& I7 ^9 j3 W2 ?, ^- J% [: o" B5 X
static void ad7606_busy_hwi(UArg ad_addr) {
0 M! s( M; M8 w( O$ r+ Q6 }
  W+ m: D, o" ~/ D4 ^8 g/ E! G( v: I4 o; W$ x
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/* X( z0 U1 k; p, u
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
: {' Z; B+ E, K* H6 O1 i* t7 q/ h8 A- L0 }; g/ Q
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)3 X7 v$ L9 |  k0 X! O; g) ^; h
        {  Y+ v( a2 [) [9 Z( v8 E4 J' A
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。5 n* s7 ~7 G5 |. O- N3 R
                cs_addr = SOC_EMIFA_CS5_ADDR ;
; ?8 P  j4 r2 \                internal = 0 ;
, i7 ^4 T1 ^; o                int_flag[0] = 1 ;7 U; W( s( ~. l; D; E6 P' _, G. |& J
        }
* r# z+ L( V) R        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
- S1 K3 ?9 Z% }( h+ V        {$ ?8 ?) Y% I, I: m
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
- @* |0 b% H0 c' i9 H' l6 v0 b                cs_addr = SOC_EMIFA_CS4_ADDR ;5 C3 P. f% v& q3 A9 ^7 N: `  [
                internal = 6 ;
" ]4 @" m9 n" ]& _                int_flag[1] = 1 ;/ E6 q- o6 B& \% a2 ?; i
        }: ?: c4 q% N* L
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
9 r. d$ I! G9 |- X3 a9 X        {
9 p3 }, [, s! _' |. u, o                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
0 m; N1 l+ @! v; P  E                cs_addr = SOC_EMIFA_CS2_ADDR ;
6 P% z" }$ [1 S1 F) o8 D* F                internal = 12 ;( b# o4 K" `, H! Y
                int_flag[2] = 1 ;6 M) r- Y' s' }, p- U
        }4 w4 j) X! q' z
  " X$ H4 l2 A  v9 `+ u
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);& l+ @1 V5 q+ E; ^. l
       & B' |0 x2 ?- F0 Y9 C
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);9 C6 \5 I% d" t3 D& ?% M
}6 _5 x: c, U# N& U' o( U
3 O, k. `" U: N0 t+ ^. j2 W
. \% B: s9 ^( j5 R9 L9 q
; z$ _1 O0 W9 W

4 }5 Q3 P" S( a, h8 f

本帖子中包含更多资源

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

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-10-16 18:01 , Processed in 0.048746 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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