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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
跳转到指定楼层
楼主
发表于 2014-12-1 14:52:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在sysbios下,uart中断收发数据,程序无法进入中断,代码如下
6 d4 L# M* \9 `5 Q4 E* f: w// 发送缓存+ l$ ^. ]7 i9 q* s7 ?& D7 q
char Send[] = "UART1 test......\n\r";
( }5 q$ i8 L8 `7 C+ c1 x/ e/ q9 X9 U; |+ A
extern void UARTconfig()
0 @+ U1 K% e1 U( D! J$ O& c{2 }  U8 t' L( G7 y9 N
//使能Uart1% W$ M% Z3 C9 C' V* a2 p5 t
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);5 ~" A# ?4 [* e  ?# t/ b

" k- ?9 H3 t9 S3 ~ // 使能 UART1禁用流控
% h9 `) H# _. J" r/ i4 B UARTPinMuxSetup(1, 0);) d4 A/ g! b' _; w% P
. t6 t3 J. j" @* f9 R; A( a) L
// 波特率 115200 数据位 8 停止位 1 无校验位
4 F7 w* m% [& I0 B  UARTConfigSetExpClk(SOC_UART_1_REGS, UART_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
  d6 z+ L" K  B# o8 R9 Q) m 8 R9 c; x4 Y* r0 ^! \3 z
  // 使能 UART1
  {  K: J2 l, G3 `+ t UARTEnable(SOC_UART_1_REGS);
2 U! s$ x, o" _3 n! [! N% [  // 使能接收 / 发送 FIFO: I* f$ V% L3 q- Q- P% ]& i
  UARTFIFOEnable(SOC_UART_1_REGS);
% A, R7 T; {" V# Y9 G; _8 j2 O4 l  // 设置 FIFO 级别
% W! H0 Z' i1 M/ l    UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1);
) d1 q* ^$ h8 ~  //Uart1中断使能
+ J0 |" @/ ?+ f( i  unsigned int intFlags = 0;4 b- K5 {+ y& ?2 K( D* t
  intFlags |= (UART_INT_LINE_STAT  |  \
7 u- i6 z7 I  F, O' f            UART_INT_TX_EMPTY |    \6 g* a& l: E( l3 J1 {3 V
            UART_INT_RXDATA_CTI);
# ]$ e( q! J1 b: E% J" G0 S            
. u0 Z  _  Q7 w0 ?/ E    UARTIntEnable(SOC_UART_1_REGS, intFlags);) R* M4 C' {- N7 z& K7 Z* j
}
3 y" Y4 R( W- s- T+ U5 f1 T" q//UART 中断服务函数4 Q; i, _" e# R: s' S
void UARTIsr(UArg arg)) u! o$ P4 S0 K- u, Y9 ]
{; N- y7 ?" c3 A* e4 s
    static unsigned int length = sizeof(Send);
9 N5 U! R0 [+ r' A1 k& R+ C2 t    static unsigned int count = 0;% k  [8 V; j. R3 k3 V  p% _
    unsigned char rxData = 0;5 p( T2 M( n# u& @7 ^) P
    unsigned int int_id = 0;0 Z, j! C, X0 h
    // 确定中断源) v( S  x6 n6 u! x+ e% t
    int_id = UARTIntStatus(SOC_UART_1_REGS);
$ X. w# g9 g/ q6 y5 j& E    // 清除 UART1 系统中断4 j" }) _5 K& Y5 j' K
    IntEventClear(SYS_INT_UART1_INT);) t. Q6 D8 V# `3 D& s/ \; B) }& i% W8 J
    // 发送中断" q; i& e0 ]% p
    if(UART_INTID_TX_EMPTY == int_id)
' S$ r9 S' T2 q$ f    {
6 B: H: S# b; z8 u# ?        if(0 < length)" u# f  @" Z2 f) f4 u! }
        {
- d# U  _' y/ o) Q( g! D            // 写一个字节到 THR
; y. ^! N' w: x4 Z! ~" C            UARTCharPutNonBlocking(SOC_UART_1_REGS, Send[count]);
7 [- @! c1 _- r1 Z% [            length--;
* c/ \1 \1 {# t4 P3 x5 M5 ^6 Z- c+ R' m            count++;' X$ S3 R0 g2 s  W1 p3 y
        }
' b* f- o. h8 j& D3 l9 S/ l        if(0 == length)
) x, l" }$ U7 `9 a  n        {1 N9 Y5 M; H1 y1 `/ ?) G& P
            // 禁用发送中断
! U9 L+ P: T6 G: J            UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY);" z& b! k$ ^# k8 \
        }
$ F' t* b+ I0 ^% |6 _! ^     }
: X& q7 G9 ]) q' t1 g    // 接收中断) N# T9 V! c7 O, @
    if(UART_INTID_RX_DATA == int_id)$ {) O( k8 @0 I7 h
    {
: O- [) z$ [7 x: {7 J        rxData = UARTCharGetNonBlocking(SOC_UART_1_REGS);
* N2 t3 F& G3 G        UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData);" e9 Z4 d$ o+ p+ S1 G
    }3 E4 g" c4 H- u4 i; \( q  I
    // 接收错误
- {) `7 `' q7 k. b2 L9 E) }/ k    if(UART_INTID_RX_LINE_STAT == int_id)- }# [6 t2 i7 X) W1 Z8 r& k0 y
    {5 b  J& n" b. z6 ?- {. n
        while(UARTRxErrorGet(SOC_UART_1_REGS))
6 d- d0 J; f, L% W/ \        {
/ s) S3 M  {, c            // 从 RBR 读一个字节. ~- ~8 n6 N3 i! V, l. U+ w4 \) t* V
            UARTCharGetNonBlocking(SOC_UART_1_REGS);
! ?/ j5 U. Y6 j! D        }
# w) @% [4 J% z( ]4 q$ K% Q    }
; M, d# n$ |" U1 k" p; k2 z    return;
  \) q/ k8 T+ T% |  _0 C" W' t- U}
; B6 D; z  F0 w; K% {1 S% ?0 gInt main()( e0 t9 v7 Q; F* T$ J
{
- V8 r% n$ H- |. i$ ~( t9 j UARTconfig();//uart 配置% }3 Y- g' k$ ~. g( `
    Error_Block eb;) Z+ ?" Q3 l9 k" t- \, ]
    System_printf("enter main()\n");
' S, c5 p* d( J  ?    Error_init(&eb);' o' B% I1 Z' z+ q- H5 T
    // 动态创建硬件中断/ w2 b8 a9 D8 H# l- ?4 q
    Hwi_Handle hwi1;3 Z7 ^- O- m5 i9 ~& {/ W
    Hwi_Params hwiParams;
5 e  ~7 L  I2 O  Y6 }    // 使用默认值初始化参数
% G$ {$ z, F, N3 P6 C    Hwi_Params_init(&hwiParams);" P' q( m' Q& [8 |! W4 R
    // 中断事件' t$ \# d/ E" g3 I4 D8 x  d
    hwiParams.eventId = SYS_INT_UART1_INT;
  K8 E. @6 L; _* x+ C& s- d9 J6 m* P    // 传递到中断服务函数的参数
5 ?& l2 q7 s, f, y6 o* ^0 m+ L    hwiParams.arg = 0;
: t" I: D1 f' l4 H) W& g    // 不允许该中断自身嵌套
0 _% d( Z; J/ ~0 ^. O* I    hwiParams.maskSetting = Hwi_MaskingOption_SELF;) ~4 e& H& p% j2 i5 Z
    // 使能中断
, K) V' D5 v! b# E( l    hwiParams.enableInt = true;
  L, N1 L2 D: ^7 z& i2 n* R    // 可屏蔽中断 4
) x* U1 X/ Y6 D0 e# a# L- f8 r' j    // 中断服务函数 hwiMain
5 t8 P+ V. B5 v  n. B( v* p    hwi1 = Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, &eb);2 o+ o: I% L7 K/ T
    if (hwi1 == NULL)' s' k( {7 h( F9 y8 A- t
        System_abort("Hwi1 create failed");( T+ d- x: c- a# B+ o
    BIOS_start();    /* does not return */) ?4 K" C. `3 K% [2 O* h9 _
    return(0);8 K" |* @4 _) v7 g; c4 e1 U7 j- U
}) T" c) t% c" B1 u1 _. R

/ f9 ?) z# ], B% e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-12-1 16:21:53 | 只看该作者
你是怎么判断没有进入中断服务函数的?8 `, Z6 {* h6 k& ^/ L( N0 S: E
回复 支持 反对

使用道具 举报

7

主题

13

帖子

95

积分

注册会员

Rank: 2

积分
95
板凳
 楼主| 发表于 2014-12-1 21:49:33 | 只看该作者
在中断服务函数里放置断点; @& Y3 T" g: w# ^5 ]
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
地板
发表于 2014-12-2 11:11:58 | 只看该作者
Greatwang 发表于 2014-12-1 21:497 }* `, h! \7 T4 H
在中断服务函数里放置断点

+ W2 A& a- p3 w, P+ s参考 GPIO_KEY0 z& ^6 w% r1 A% t
回复 支持 反对

使用道具 举报

0

主题

6

帖子

115

积分

注册会员

Rank: 2

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-4 03:00 , Processed in 0.039632 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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