在sysbios下,uart中断收发数据,程序无法进入中断 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9683|回复: 4
打印 上一主题 下一主题

在sysbios下,uart中断收发数据,程序无法进入中断

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下. |2 ]  g! X5 r/ b2 O  w9 h& K5 p
// 发送缓存" x. t9 w% [3 x8 n" ~
char Send[] = "UART1 test......\n\r";
' V! l/ Y' _, H+ S5 ]* Q; F# f2 w+ |5 [$ p* S
extern void UARTconfig()
0 u- W. E( N' Z6 A' j9 i{' N6 c- h3 w9 \
//使能Uart1# u" V8 E# X2 n( Z  Y. W/ O+ R* `
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
/ o0 e+ f# I0 t4 t 4 I* y1 d! k/ u$ ]' [
// 使能 UART1禁用流控
# ^, B9 a* B/ J& ]8 Z& H6 o UARTPinMuxSetup(1, 0);$ L/ {9 c: [1 U, N/ M
2 z3 V4 @  ]/ F8 v! l$ r9 r; v2 M% D
// 波特率 115200 数据位 8 停止位 1 无校验位3 Q' ~! K8 D: H/ d9 n$ Y
  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
' P. _) _/ d; }' O . ?$ K6 f# T0 r; t9 o
  // 使能 UART1
4 W" ~2 b) ]0 M# z, b) N: C UARTEnable(SOC_UART_1_REGS);
5 O1 ~0 E1 Z4 @1 A+ m) e  l' C  // 使能接收 / 发送 FIFO
# A) \. O- x' i) U. E; i. W% I8 o  w  UARTFIFOEnable(SOC_UART_1_REGS);- }' Z" @2 [, U8 d, i
  // 设置 FIFO 级别+ H- t7 w) P/ I5 W& W) _6 i- O
    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);  C8 E6 v5 S% R  k" j4 E
  //Uart1中断使能$ E. p; v- B/ ?( _6 h
  unsigned int intFlags = 0;( e% e# q! B4 z( \" m* \
  intFlags |= (UART_INT_LINE_STAT  |  \
. u, j+ e9 @7 ~% l            UART_INT_TX_EMPTY |    \
7 h# Q) Y* E. g) h) Y3 |- x5 h) v            UART_INT_RXDATA_CTI);
3 S# r( S8 r- N            ; M$ F6 X$ j- u& b7 q6 A
    UARTIntEnable(SOC_UART_1_REGS, intFlags);
5 v7 t+ l  X7 ~3 l: }3 A+ \* v  C' P' G}
0 {! y! C' X4 ~) _; B/ T//UART 中断服务函数+ Q9 w) c/ O: a
void UARTIsr(UArg arg)& n9 \: a/ I- x4 E
{
/ i9 X- i# k$ ^# ]1 S+ U    static unsigned int length = sizeof(Send);
  P& O7 ]$ E- M0 {$ [7 L  c    static unsigned int count = 0;
9 N8 B- U: d3 R4 o    unsigned char rxData = 0;4 @$ R6 A9 k! G2 p* W7 m
    unsigned int int_id = 0;+ ]" |, o# G! m, z; r# R- Z
    // 确定中断源+ W# z9 `( b7 r+ w4 R9 z, i/ s- p
    int_id = UARTIntStatus(SOC_UART_1_REGS);
- J, S6 }5 T' z4 A; A. Z8 ^, P% Y7 g    // 清除 UART1 系统中断1 M" R" |( V$ D
    IntEventClear(SYS_INT_UART1_INT);* ^6 b% D) G: i% @
    // 发送中断
: m+ I; ]0 G& g$ W    if(UART_INTID_TX_EMPTY == int_id)9 \9 @+ i9 ~% s- Q0 g6 _1 {4 G' U1 c
    {
* |+ T9 g. H% @8 {/ s        if(0 < length)
. [9 Z5 w5 F9 W; p% D8 ?- A        {
) A3 y+ n& r+ Y: s; X! n. S9 F            // 写一个字节到 THR
" K+ I6 b2 v; i6 O' z            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);' R/ r+ T$ J* [
            length--;
* q* Z& J  C* ~+ M            count++;
, {) g  v) c  r% N& m        }
& x# L$ Q& J+ N. t9 k  n" \+ Q        if(0 == length): @# F. x  p0 Q% r3 {: r' y
        {8 j4 @6 h8 q) X: E6 z' U8 l+ C
            // 禁用发送中断+ M6 r5 K( {2 A$ Y" p, z; H* R+ x
            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);- M: i2 n: @/ ^. ^3 f9 h+ U
        }
  _- Q: \0 R' D     }
& N  o. O3 k: J3 U    // 接收中断+ d. X) V4 F* f- _5 Z9 w
    if(UART_INTID_RX_DATA == int_id)5 i' M6 ?/ _4 d3 e' q
    {3 v  V; s2 N8 X, q+ d& Z, ~
        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);3 T1 e. X7 Z( ^* S7 H
        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);
5 G2 |* `* c; w, P: X2 }1 a% y7 v    }
0 s7 H; z8 F" j6 x4 E; [    // 接收错误
) W, Y& Y9 q7 m, E) S    if(UART_INTID_RX_LINE_STAT == int_id)- B2 h! \: [- t# v
    {
, u. [% @+ O: o+ l) h        while(UARTRxErrorGet(SOC_UART_1_REGS))' j: z) i$ I4 U* M' D8 |. O
        {
* E9 l0 s0 X" S2 L( `' s8 N  I            // 从 RBR 读一个字节) M% X3 _2 }$ ]  Q
            UARTCharGetNonBlocking(SOC_UART_1_REGS);- f. N5 r( d/ r: @* @* |
        }6 U) r6 s2 ?2 o, g
    }
5 t, f8 n) T) T    return;2 }% F% q5 [0 A- T/ R/ e
}
* p8 `4 e8 d6 R8 }: }* b& kInt main()
7 k+ o+ |$ j' @4 S9 ~; b$ |: B{ ! B8 ~0 Y6 W8 k/ c( u7 |* h, D
UARTconfig();//uart 配置/ x! r7 N/ ?3 a) B
    Error_Block eb;
4 p* o0 V! w+ F, g. ?) j/ h    System_printf("enter main()\n");2 y; R) ~8 d4 m5 @
    Error_init(&eb);
' O( C; B7 D6 h$ n6 {* x    // 动态创建硬件中断
- q7 K  ]' r5 J! I$ q4 B8 T    Hwi_Handle hwi1;
. [7 O4 s9 Q4 \3 g9 T7 \1 A    Hwi_Params hwiParams;% H: J# l* J: x7 [3 E8 n
    // 使用默认值初始化参数
+ o. N6 t/ l5 m$ P/ ?8 W# V    Hwi_Params_init(&hwiParams);
9 j1 [+ {5 a; g' M0 v3 }' a    // 中断事件5 R  J: ]# g+ V+ P
    hwiParams.eventId = SYS_INT_UART1_INT;
: a3 L2 g6 B! x* T; A4 \    // 传递到中断服务函数的参数
" Z; M% x. a. O+ S! b    hwiParams.arg = 0;( h- R! f4 A+ ]" }% g# s5 \
    // 不允许该中断自身嵌套
0 r! w4 W  M) A) @    hwiParams.maskSetting = Hwi_MaskingOption_SELF;
) ]+ Z, X; S! p+ d0 i& p3 W* \    // 使能中断) g8 L7 I, ^5 {0 E# {: u  @
    hwiParams.enableInt = true;: @- H1 ~* \; b/ y5 ?4 ~3 z! p) d
    // 可屏蔽中断 42 j- F, k; @- \0 V6 F$ u: @% A
    // 中断服务函数 hwiMain1 k1 f1 L7 _2 v5 I7 x8 m7 \3 t* y
    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);
" W/ O5 z+ u9 u7 y5 ?    if (hwi1 == NULL)+ |+ k9 a$ U; L3 d8 c' E* C
        System_abort("Hwi1 create failed");
3 q" E& y- ^3 t# C2 j8 }. n" }    BIOS_start();    /* does not return */
8 s# `7 Q9 R/ w  H2 y2 A$ O5 d    return(0);; Q& ?" e# q+ M: z+ K, O. H
}
2 ?& ^$ ^# Y+ p9 F! u; u# G
) C" T* v) w! I$ N" F; I' D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?
! c7 O: u! F1 M$ F3 a
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点
0 Y) i% C  c/ b9 y
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:49
, Z3 _/ \' P4 j. p" ~在中断服务函数里放置断点
. ?/ r6 F! M+ h0 `
参考 GPIO_KEY" l: v4 I( S0 F- b: {" U3 C
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

积分
115
5#
发表于 2016-8-1 21:05:07 | 只看该作者
请问你解决没,我现在也遇到这个问题了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 07:26 , Processed in 0.040857 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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