完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
TQ2440是由广州天嵌计算机科技有限公司精心打造的一款开发板。以稳定的性能,过硬的质量,丰富的扩展接口,优质的售后服务和技术支持,赢得众多企业的青睐和支持。
//========================================= // NAME: main.c // DESC: TQ2440串口UART测试程序 //========================================= /* 头文件包含 */ #include "def.h" #include "option.h" #include "2440addr.h" #include #include #include #include #include //====================================================== static volatile int uart_port = 0; void uart_init(int pclk,int buad,int ch) { //UART初始化:端口使能、功能设定、波特率、设置数据格式 rGPHCON = (rGPHCON & ~(0xfff<<4)) | (0xaaa<<4);//端口RX[0:2]、TX[0:2]功能 rGPHUP = rGPHUP | (0x7<<1); //端口GPH[1:3]禁止上拉 rUFCON0 = 0x0; //禁止FIFO rUFCON1 = 0x0; //禁止FIFO rUFCON2 = 0x0; //禁止FIFO rUMCON0 = 0x0; //禁止AFC rUMCON1 = 0x0; //禁止AFC //Normal:No parity:One stop:8-bits 中断响应 UART clock: PCLK rULCON0 = (rULCON0 & ~0xff) | ((0x0<<6)|(0x0<<3)|(0x0<<2)|(0x3)); rUCON0 = (rUCON0 & ~0x3ff) | ((0x1<<9)|(0x1<<6)|(0x1<<2)|(0x1)); rUBRDIV0 = ((int)(pclk/16./buad+0.5)-1); rULCON1 = (rULCON1 & ~0xff) | ((0x0<<6)|(0x0<<3)|(0x0<<2)|(0x3)); rUCON1 = (rUCON1 & ~0x3ff) | ((0x1<<9)|(0x1<<6)|(0x1<<2)|(0x1)); rUBRDIV1 = ((int)(pclk/16./buad+0.5)-1); rULCON2 = (rULCON2 & ~0xff) | ((0x0<<6)|(0x0<<3)|(0x0<<2)|(0x3)); rUCON2 = (rUCON2 & ~0x3ff) | ((0x1<<9)|(0x1<<6)|(0x1<<2)|(0x1)); rUBRDIV2 = ((int)(pclk/16./buad+0.5)-1); uart_port = ch; //设置串口端口号 } //****************************************************** // 串口发送函数 //****************************************************** //====================================================== void uart_send_byte(int data) { if(0 == uart_port) { if(data == 'n') { while(!(rUTRSTAT0 & 0x2)); rUTXH0 = 'n'; } while(!(rUTRSTAT0 & 0x2)); rUTXH0 = data; } else if(1 == uart_port) { if(data == 'n') { while(!(rUTRSTAT1 & 0x2)); rUTXH1 = 'n'; } while(!(rUTRSTAT1 & 0x2)); rUTXH1 = data; } else if(2 == uart_port) { if(data == 'n') { while(!(rUTRSTAT2 & 0x2)); rUTXH2 = 'n'; } while(!(rUTRSTAT2 & 0x2)); rUTXH2 = data; } } //====================================================== void uart_send_string(char *string) { while(*string) { uart_send_byte(*string++); } } //====================================================== void uart_printf(char *fmt,...) { va_list ap; char string[256]; va_start(ap,fmt); vsprintf(string,fmt,ap); uart_send_string(string); va_end(ap); } //****************************************************** // 串口接收函数 //****************************************************** //====================================================== void uart_tx_empty(void) { if(0 == uart_port) { while(!(rUTRSTAT0 & 0x4));//等待Tx为空 } if(1 == uart_port) { while(!(rUTRSTAT1 & 0x4));//等待Tx为空 } if(2 == uart_port) { while(!(rUTRSTAT2 & 0x4));//等待Tx为空 } } //====================================================== char uart_get_ch(void) { if(0 == uart_port) { while(!(rUTRSTAT0 & 0x1));//等待Rx被读 return rURXH0; //读缓存寄存器 } else if(1 == uart_port) { while(!(rUTRSTAT1 & 0x1));//等待Rx被读 return rURXH1; //读缓存寄存器 } else if(2 == uart_port) { while(!(rUTRSTAT2 & 0x1));//等待Rx被读 return rURXH2; //读缓存寄存器 } return 0; } //====================================================== char uart_get_key(void) { if(0 == uart_port) { if(rUTRSTAT0 & 0x1) //Rx被读 { return rURXH0; //读缓存寄存器 } else { return 0; } } if(1 == uart_port) { if(rUTRSTAT1 & 0x1) //Rx被读 { return rURXH1; //读缓存寄存器 } else { return 0; } } if(2 == uart_port) { if(rUTRSTAT2 & 0x1) //Rx被读 { return rURXH2; //读缓存寄存器 } else { return 0; } } return 0; } //====================================================== void uart_get_string(char *string) { char *string1 = string; char c = 0; while((c = uart_get_ch())!='r') { if(c == 'b') { if((int)string1 < (int)string) { uart_printf("bb"); string--; } } else { *string++ = c; uart_send_byte(c); } } *string = '�'; uart_send_byte('n'); } //====================================================== int uart_get_intnum(void) { char str[30]; char *string = str; int base = 10; int minus = 0; int result = 0; int last_index; int i; uart_get_string(string); if(string[0] == '-') { minus = 1; string++; } if(string[0] == '0' && (string[1] == 'x' || string[1] == 'X')) { base = 16; string = string + 2; } last_index = strlen(string)-1; if(last_index < 0) { return -1; } if(string[last_index] == 'h' || string[last_index] == 'H') { base = 16; string[last_index] = 0; last_index--; } if(base == 10) { //atoi将字符串转换为整型值 result = atoi(string); result = minus ? (-1*result) : result; } else { for(i=0;i<=last_index;i++) { //判断字符是否为英文字母,当为英文字母a-z或A-Z时,返回非零值,否则返回零。 if(isalpha(string)) { //isupper 判断字符是否为大写英文字母,当c为大写英文字母,返回非零值,否则返回零。 if(isupper(string)) { result = (result<<4) + string-'A'+10; } else { result = (result<<4) + string-'a'+10; } } else { result = (result<<4) + string-'0'+10; } } result = minus ? (-1*result) : result; } return result; } //====================================================== int uart_get_intnum_gj(void) { char string[16]; char *p_string = string; char c; int i = 0; int data = 0; while((c = uart_get_ch()) != 'r') { if(c == 'b') { p_string--; } else { *p_string++ = c; } //uart_send_byte(c); } *p_string = '�'; i=0; while(string != '�') { data = data*10; if(string<'0' || string>'9') { return -1; } data = data +(string-'0'); i++; } return data; } //****************************************************** void Main(void) { uart_init(50000000,115200,0); while(1) { if('-' == uart_get_ch()) { uart_printf("+n"); } if('+' == uart_get_key()) { uart_printf("-n"); } } } 感谢晨旭晚霞的支持! 供货情况: 天嵌科技提供专业嵌入式板卡和行业解决方案。如有需要,可以联系天嵌科技的销售人员。 销售电话:020-38219416 38373101 技术支持:020-38219416转807 820 网址:http://www.embedsky.com |
|
相关推荐
|
|
已学习,谢谢楼主!
|
|
|
|
|
|
教程挺多的,适合学习!
|
|
|
|
|
|
|
|
|
|
|
|
感谢楼主分享!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
769 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2583 浏览 1 评论
849 浏览 0 评论
1641 浏览 1 评论
2551 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 19:59 , Processed in 0.773719 second(s), Total 53, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号