在STC的单片机上,多路串口如果波特率相同的情况下可以采用同一个定时器来产生时钟,那么在N76E003上面是否也可以这么实现呢?调试了好久都行,问下有哪位大神实现了?还是说硬件上本身就不支持这么做?初始化部分如下: 是否有漏了什么?
/********************************************************************
* 名称: InitialUART0AndUART1_Timer3(UINT32 u32Baudrate)
* 功能: 初始化串口
* 调用:
* 输入:
* 返回值:
***********************************************************************/
void InitialUART0AndUART1_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
{
/****串口0端口设置******************************************************/
P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
/********************************************************************/
/****串口1端口设置******************************************************/
P02_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P16_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
/***串口0相关寄存器配置******************************************************/
SCON = 0x50; //UART0 Mode1,REN=1,TI=1 串口0控制寄存器
set_SMOD; //UART0 Double Rate Enable
set_BRCK; //UART0 baud rate clock source = Timer3
/********************************************************************/
/***串口1相关寄存器配置******************************************************/
SCON_1 = 0x50; //UART1 Mode1,REN_1=1,TI_1=1
/********************************************************************/
T3CON &= 0xF8; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)定时器3预分频 1/1
#ifdef FOSC_160000
RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
#endif
#ifdef FOSC_166000
RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
RL3 = LOBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
#endif
set_TR3; //Trigger Timer3
set_TI; //For printf function must setting TI = 1
set_ES; //enable UART interrupt
set_TI_1; //For printf function must setting TI_1 = 1
set_ES_1; //For interrupt enable
set_EA; //enable global interrupt
}
|