嵌入式课程设计报告(6)

2019-03-09 22:24

{ } else { }

if ( (uartch2->S1) & UART_S1_TDRE_MASK ) { }

uartch2->D = ch; break;

if ( (uartch1->S1) & UART_S1_TDRE_MASK ) { }

uartch1->D = ch; break;

}//end for if (t >= 0xFBBB) return 1; //发送超时 else

return 0; //成功发送 }

//============================================================================ //函数名称:uart_sendN

//参数说明:uartNo: 串口号:UART_0、UART_1、UART_2 // buff: 发送缓冲区 // len:发送长度

//函数返回: 函数执行状态:0=正常;1=异常 //功能概要:串行 接收n个字节

//============================================================================ uint_8 uart_sendN (uint_8 uartNo ,uint_16 len ,uint_8* buff) {

uint_16 i;

for (i = 0; i < len; i++) {

23

if (uart_send1(uartNo, buff[i]))

{

break; }

}

if (i >= len) return 1; else return 0; }

//============================================================================ //函数名称:uart_send_string

//参数说明:uartNo:UART模块号:UART_0、UART_1、UART_2 // buff:要发送的字符串的首地址 //函数返回: 函数执行状态:0=正常;非0=异常。 //功能概要:从指定UART端口发送一个以'\\0'结束的字符串

//============================================================================ uint_8 uart_send_string(uint_8 uartNo, void *buff) {

uint_16 i = 0;

uint_8 *buff_ptr = (uint_8 *)buff; for(i = 0; buff_ptr[i] != '\\0'; i++) {

if (uart_send1(uartNo,buff_ptr[i])) return 1; } return 0; }

//============================================================================ //函数名称:uart_re1

//参数说明:uartNo: 串口号:UART_0、UART_1、UART_2

// fp:接收成功标志的指针:*fp=0,成功接收;*fp=1,接收失败 //函数返回:接收返回字节 //功能概要:串行接收1个字节

//============================================================================

24

uint_8 uart_re1 (uint_8 uartNo,uint_8 *fp) {

uint_32 t; uint_8 dat;

for (t = 0; t < 0xFBBB; t++)//查询指定次数 {

if(0==uartNo) {

UARTLP_MemMapPtr uartch1=UART0_BASE_PTR; UART_MemMapPtr uartch2 = UART_ARR[uartNo-1];

//判断接收缓冲区是否满

if ((uartch1->S1) & UART_S1_RDRF_MASK ) {

dat = uartch1->D; *fp= 0; //收到数据 break; }

} else {

//判断接收缓冲区是否满

if ((uartch2->S1) & UART_S1_RDRF_MASK ) {

dat = uartch2->D; *fp= 0; //收到数据 break; }

}//end for if(t >= 0xFBBB) {

dat = 0xFF;

*fp = 1; //未收到数据 }

return dat; //返回接收到的数据

}

25

}

//============================================================================ //函数名称:uart_reN

//参数说明:uartNo: 串口号:UART_0、UART_1、UART_2 // buff: 接收缓冲区 // len:接收长度

//函数返回:函数执行状态 0=正常;非0=异常 //功能概要:串行 接收n个字节

//============================================================================ uint_8 uart_reN (uint_8 uartNo ,uint_16 len ,uint_8* buff) {

uint_16 i; uint_8 flag = 0;

for (i = 0; i < len && 0 == flag; i++) {

buff[i] = uart_re1(uartNo, &flag); }

if (i >= len)

return 1; //接收失败 else

return 0; //接收成功 }

//====定义串口IRQ号对应表==== static uint_8 table_irq_uart[3] = {12, 13, 14};

//============================================================================ //函数名称:uart_enable_re_int

//参数说明:uartNo: 串口号:UART_0、UART_1、UART_2 //函数返回:无

//功能概要:开串口接收中断

//============================================================================ void uart_enable_re_int(uint_8 uartNo) {

26

UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;

UART_MemMapPtr uartch2 = UART_ARR[uartNo-1]; if(0==uartNo)

uartch1->C2 |= UART_C2_RIE_MASK; //开放UART接收中断 else

uartch2->C2 |= UART_C2_RIE_MASK; //开放UART接收中断 enable_irq(table_irq_uart[uartNo]); //开中断控制器IRQ中断 }

//============================================================================ //函数名称:uart_disable_re_int

//参数说明:uartNo: 串口号 :UART_0、UART_1、UART_2 //函数返回:无

//功能概要:关串口接收中断

//============================================================================ void uart_disable_re_int(uint_8 uartNo) {

UARTLP_MemMapPtr uartch1=UART0_BASE_PTR; UART_MemMapPtr uartch2 = UART_ARR[uartNo-1]; if(0==uartNo)

uartch1->C2 &= ~UART_C2_RIE_MASK; //禁止UART接收中断

else

uartch2->C2 &= ~UART_C2_RIE_MASK; //禁止UART接收中断 }

//============================================================================ //启用MCGIRCLK时钟,输出时钟频率在31.25Khz ~ 4Mhz void MCGIRCLK_OutEnable(void) {

MCG_C1 |= MCG_C1_IRCLKEN_MASK|MCG_C1_IREFSTEN_MASK; MCG_SC |=MCG_SC_FCRDIV(0x0); //内部4M快速参考时钟分频因子, //可将时钟分频在31.25Khz ~ 4Mhz MCG_C4 |= MCG_C4_FCTRIM(0xA); MCG_C2 |= MCG_C2_IRCS_MASK; while (!(MCG_S & MCG_S_IRCST_MASK));

27

disable_irq(table_irq_uart[uartNo]); //禁止中断控制器IRQ中断


嵌入式课程设计报告(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:智能电池充电器的设计毕业论文 应用电子

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: