[原创]
TQ2440裸奔程序:串口UART的PC机按键测试程序
嵌入式系统
 
3009 人阅读
|
9 人回复
|
2016-03-09 
 
 
 
 
TA的每日心情  | 奋斗 2018-3-5 10:57 | 
|---|
 
  签到天数: 112 天 连续签到: 1 天 [LV.6]常住居民II 
进士 
 
 
	- 积分
 - 1990
 
 
 
 
 | 
 
 
  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[i])) 
  { 
  //isupper 判断字符是否为大写英文字母,当c为大写英文字母,返回非零值,否则返回零。 
  if(isupper(string[i])) 
  { 
  result = (result<<4) + string[i]-'A'+10; 
  } 
  else 
  { 
  result = (result<<4) + string[i]-'a'+10; 
  } 
  } 
  else 
  { 
  result = (result<<4) + string[i]-'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[i] != '?') 
  { 
  data = data*10; 
  if(string[i]<'0' || string[i]>'9') 
  { 
  return -1; 
  } 
  data = data +(string[i]-'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 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
沙发
 
 
sally_cheng 
 
发表于 2016-3-11 15:49:00
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2016-8-17 17:27 | 
|---|
 
  签到天数: 4 天 连续签到: 1 天 [LV.2]偶尔看看I 
童生 
 
 
	- 积分
 - 61
 
 
 
 
 | 
板凳
 
 
lzh2 
 
发表于 2016-3-11 20:14:20
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
地板
 
 
adeechan36 
 
发表于 2016-3-13 23:00:52
|
只看该作者
 
 
 
 
 
 
很久之前用过天嵌的2440学习了,现在改用i.mx6q了,资料挺多的  |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
5#
 
 
lyt2851297573 
 
发表于 2016-3-14 14:13:51
|
只看该作者
 
 
 
 
 
 
| 
同学说最近天嵌淘宝有优惠活动,包邮,还送ov9650摄像头跟视频教程光盘,可是我前一个星期就买了2440这套板子,问淘宝客服可不可以送我摄像头,客服说只能是活动期间购买才送……好吧,错过了活动,还好没错过楼主的资料分享!!! |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
6#
 
 
张晓然 
 
发表于 2016-3-14 16:17:46
|
只看该作者
 
 
 
 
 
 
好同志看见好帖一定要顶的~  |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
7#
 
 
张晓然 
 
发表于 2016-3-14 16:18:51
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
8#
 
 
复仇者联盟 
 
发表于 2016-3-16 10:23:07
|
只看该作者
 
 
 
 
 
 
 分享,分享,谢谢楼主! |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2023-5-23 14:28 | 
|---|
 
  签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到 
进士 
 
 
	- 积分
 - 1020
 
 
 
 
 | 
9#
 
 
wuping-346121 
 
发表于 2016-3-16 11:23:50
|
只看该作者
 
 
 
 
 
 
adeechan36 发表于 2016-3-13 23:00 ![]()  
很久之前用过天嵌的2440学习了,现在改用i.mx6q了,资料挺多的  
因为一直都在用心,我们的客户是从学生做到企业,一路上来的,只要用过,终身难忘,所以我们知道感恩,只为让您的开发更容易 
 |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2023-5-23 14:28 | 
|---|
 
  签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到 
进士 
 
 
	- 积分
 - 1020
 
 
 
 
 | 
10#
 
 
wuping-346121 
 
发表于 2016-3-16 11:26:28
|
只看该作者
 
 
 
 
 
 
lyt2851297573 发表于 2016-3-14 14:13 ![]()  
同学说最近天嵌淘宝有优惠活动,包邮,还送ov9650摄像头跟视频教程光盘,可是我前一个星期就买了2440这套板 ...  
活动还在进行中哦亲,如有需要,可以去我们淘宝看看哦 
 |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |