TQ2440裸奔程序>>串口UART打印printf测试程序

本文提供了一段使用TQ2440微控制器进行串口UART初始化并实现printf功能的测试程序。通过设置端口、功能、波特率等参数,实现了基本的字符和字符串打印功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //=========================================
// NAME: main.c
// DESC: TQ2440串口UART打印printf测试程序
//=========================================
/* 头文件包含 */
#include "def.h"
#include "option.h"
#include "2440addr.h"

#include <stdarg.h>
#include <stdio.h>

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 Main(void)
{
 int plck_val = 50000000;
 int buad_val = 115200;
 int ch_val = 0;

 uart_init(plck_val,buad_val,ch_val);
 uart_printf("PCLK is %d,buad is %d,uart_port is %d \n",plck_val,buad_val,ch_val);
 while(1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值