这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» R8C/2B 串口1的相关问题想问大家

共6条 1/1 1 跳转至

R8C/2B 串口1的相关问题想问大家

菜鸟
2008-06-09 18:39:07 打赏

有关UART1的使用,我怎么调都调不过,这边问问大家有什么办法不?

问题1.UART1发送,只能在开机的第一次可以发送第一个字节,
以后在查询发送寄存器的时候,总是为不空的,然后就不能再发送了
芯片是R8C/2B,片内震荡20MHz,相似的配置在UART0是可以正常使用的

问题2.还有个关于编译器的问题,提示信息:
H:\Workspace\IIIB_0806\IIIB_0806\sect30.inc(112) : Warning (ln30): H:\Workspace\IIIB_0806\IIIB_0806\Debug\ncrt0.r30 : 'ROMDATA' section 'vector' is overlapped on the 'program' from FEDCH to FEDCH
H:\Workspace\IIIB_0806\IIIB_0806\sect30.inc(185) : Error (ln30): H:\Workspace\IIIB_0806\IIIB_0806\Debug\ncrt0.r30 : 'ROMDATA' section 'fvector' is overlapped on the 'program' from FFDCH to FFFFH


相似的位置还有 section “rom_FE”,“rom_FO”
前面有个相关的帖子是也是这样的错误,但是我这边不知道怎么解决掉这个问题,
sect30.inc文件中,除了中断地址之外我是没有修改的.


UART1相关的源码:


/************************************************************************************
Name: uart_init
Parameters: None
Returns: None
Description: Initial setting of UART SFR
************************************************************************************/
void uart1_init(void)
{
UINT i;

asm("FCLR I"); /* Interrupt disabled */

p6|=0x20;
u1pinsel=1;
pd6|=0x20;
pd6&=~0x80;

//u1c0 &= 0x08;
u1c0 = 0x00;
u1c1 = 0x00;

u1mr = 0x05;//8 位数据,1个停止位,无校验

u1brg = 124;//9600

s1tic = 0x05; /* Enable UART0 transmit Interrupt */
s1ric = 0x05; /* Enable UART0 receive Interrupt */

te_u1c1=1;//允许发送
re_u1c1=1;//允许接受

asm("FSET I"); /* Interrupt enable */

}
#pragma INTERRUPT /B UART0_transINT 19
void UART1_transINT(void)
{
//ti_u1c1=1;
}
#pragma INTERRUPT /B UART0_recvINT 20
void UART1_recvINT(void)
{
UINT8 t;
if(ri_u1c1==1&&sum_u1rb==0)
{
t=u1rbl;
}
re_u1c1=1;
}


void UART1_SendMem(const char *buf,UINT8 n)
{

UINT8 i;
i=0;
while(i{
while(!ti_u1c1); //等待发送寄存器空闲
u1tb=buf[i];
i++;
}
while(!ti_u1c1);
//while(!txept_u1c0);

}

void UART1_Send(const char *buf)
{
UART1_SendMem(buf,strlen(buf));

}

void UART1_SendChar(UINT8 ch)
{

while(!ti_u1c1);
u1tb=ch;
while(!ti_u1c1);
//while(!txept_u1c0);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
中断向量
*/
.section vector,ROMDATA
.org __VECTOR_ADR__

.if 1
.lword dummy_int ; vector 0
.lword dummy_int ; vector 1
.lword dummy_int ; vector 2
.lword dummy_int ; vector 3
.lword dummy_int ; vector 4
.lword dummy_int ; vector 5
.lword dummy_int ; vector 6
.lword dummy_int ; vector 7
.lword dummy_int ; vector 8
.lword dummy_int ; vector 9
.lword dummy_int ; vector 10
.lword dummy_int ; vector 11
.lword dummy_int ; vector 12
.lword dummy_int ; vector 13
.lword dummy_int ; vector 14
.lword dummy_int ; vector 15
.lword dummy_int ; vector 16
;.lword dummy_int ; vector 17
.glb _UART0_transINT
.lword _UART0_transINT ;UART0发送中断
;.lword dummy_int ; vector 18
.glb _UART0_recvINT
.lword _UART0_recvINT ;UART0 接收中断
;.lword dummy_int ; vector 19
.glb _UART1_transINT
.lword _UART1_transINT ;UART1发送中断
;.lword dummy_int ; vector 20
.glb _UART1_recvINT
.lword _UART1_recvINT ;UART1 接收中断
.lword dummy_int ; vector 21
;.lword dummy_int ; vector 22
.glb _timerRa_INT
.lword _timerRa_INT ;定时器A中断
;.lword dummy_int ; vector 23
.glb _timerRb_INT
.lword _timerRb_INT ;定时器中断B
.lword dummy_int ; vector 24
.lword dummy_int ; vector 25
.lword dummy_int ; vector 26

.endif




关键词: 串口 相关 问题 想问 大家 UART1 UART

菜鸟
2008-06-09 22:03:26 打赏
2楼

楼主先请检查所用的调试器是E8/E8a吗?瑞萨R8C的on chip 调试器好像用到了UART1,调试时最好先避开调试UART1。网上有E8/E8a调试注意事项的文档下载。至于overlap的错误,一般定义的RAM/ROM区的地址定义区间有冲突,请仔细检查一下,包括E8/E8a调试时所需的firmware与你的应用程序。


菜鸟
2008-06-09 22:29:16 打赏
3楼

那如果我就是需要使用UART1的话,可以使用起来吗?软件可以使用的.看了你的回帖,我新建了 一个工程,在[Setting the Target of System for Debugging]这个步骤的时候,R8C Simulator和R8C E8 SYSTEM 这两个选项都没有选上,
测试的时候我是将Mot文件直接烧入到芯片中运行测试,但是效果还是一样的。只能发送第一个字节


菜鸟
2008-06-09 22:39:02 打赏
4楼
忘了说了我用的E8 的调试器

菜鸟
2008-06-10 15:05:53 打赏
5楼

#pragma INTERRUPT /BUART0_transINT 19

voidUART1_transINT(void)

{

//ti_u1c1=1;

}

您声明的中断程序名和实际定义的中断程序名称不一样啊!


菜鸟
2008-06-10 16:14:01 打赏
6楼
啊,,,,,发现了发现了,
谢谢了啊,可以正确的发送出去了。

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]