当前位置: 首页 > news >正文

uart串口 day57

十二:UART

一:正常发送

每个UART通道包含两个的64字节的FIFO给发送和接收

//正常运行(非中断)
#include <s3c2440.h>
#include "uart.h"void uart0_init(void)
{// 配置GPH2、3功能为UART0GPHCON &= ~(0xf << 4);GPHCON |= (0xa << 4);ULCON0 = (0x3 << 0);UCON0 &= ~(0xf << 12);UCON0 |= (14 << 12);	//配置FCLK分频系数为(14 + 6)UCON0 |= (0x3 << 10);	//时钟选择:FCLK		UCON0 &= ~(0xf << 0);UCON0 |= (0x5 << 0);	//irq或polling模式UCON2 |= (1 << 15);		//使能FCLK/nUCON0 |= (1 << 7);		//Rx超时使能UBRDIV0 = 129;	//波特率 9600UFCON0 |= (1 << 1);		//复位RxFIFO	UFCON0 |= (1 << 0);		//复位TxFIFOUFCON0 &= (0x3 << 4);UFCON0 |= (0x1 << 4);   //RxFIFO触发深度为8UFCON0 |= (1 << 0);  	//使能FIFOINTSUBMSK &= ~(1 << 0);INTMSK &= ~(1 << 28);
}unsigned char uart0_recv_byte(void)
{unsigned char data = 0;while(!(UTRSTAT0 & (1 << 0)));data = URXH0;return data;
}										   char uart0_recv(unsigned char * buf, unsigned char len)
{unsigned char i = 0;unsigned char recv_len = UFSTAT0 & 0x3f;unsigned char read_len = (len < recv_len) ? len : recv_len;for(i = 0; i < read_len; i++){buf[i] = URXH0;}return i;
}void uart0_send_byte(unsigned char ch)
{while(!(UTRSTAT0 & (1 << 2)));UTXH0 = ch;	
}unsigned char uart0_send(const unsigned char * buf, unsigned char len)
{unsigned char i = 0;for(i = 0; i < len; i++){uart0_send_byte(buf[i]);	}return i;
}
-------------------------------------------------------------clk_init();uart0_init();while(1){unsigned char ret = 0;ret = uart0_recv(uart_data,sizeof uart_data);uart0_send(uart_data,ret);}

二:中断形式

void c_deal_irq(void)
{// 1. 判断哪个中断源触发中断 并 处理// 清中断标志unsigned int irq_num = INTOFFSET;if(irq_num == 0x1c){if(SUBSRCPND & (1 << 0)){	unsigned char ret = 0;unsigned char uart_data[64] = {0};ret = uart0_recv(uart_data, sizeof uart_data);	uart0_send(uart_data, ret);SUBSRCPND |= (1 << 0);}}//	irq_handler[irq_num]();SRCPND |= (1 << irq_num);INTPND = INTPND;
}
http://www.dtcms.com/a/337197.html

相关文章:

  • 产品经理如何提升职场学习能力?破除成长瓶颈
  • Vue+Flask 电影协同推荐可视化平台 前后端分离 大数据分析
  • Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
  • 05.用户和组管理命令
  • 【机器学习】FPR(False Positive Rate,误报率)是什么?
  • Zephyr下ESP32S3开发环境搭建(Linux篇)
  • 深度研究系统、方法与应用的综述
  • Transformer架构的编码器和解码器介绍
  • 管理本地用户和组:红帽企业 Linux 系统安全的基础
  • TDengine `count_window` 指定列计数功能用户手册
  • 数据泵实施VPS海外:跨国数据同步的完整解决方案
  • elasticsearch-集成prometheus监控(k8s)
  • 【iOS】锁的原理
  • Flutter 多功能列表项:图标、文字与Switch组合
  • Highcharts for Flutter 正式发布
  • 云原生俱乐部-docker知识点归纳(1)
  • MySQL的多版本并发控制(MVCC):
  • 【Java基础常见辨析】重载与重写,深拷贝与浅拷贝,抽象类与普通类
  • 基于 JSP+Mysql实现MVC房屋租赁系统
  • Word 中 MathType 公式编号问题与解决
  • 自定义table
  • SpringBoot--Spring MVC 拦截器注入与 new 的区别
  • OSCP - Proving Grounds - Vanity
  • 分布式系统的“不可能三角”:CAP定理深度解析
  • 【数据结构】堆中插入数据,删除数据
  • Android Handler 线程执行机制
  • python遇到异常流程
  • 【Langchain系列二】LangChain+Prompt +LLM智能问答入门
  • Unix Domain Socket(UDS)和 TCP/IP(使用 127.0.0.1)进程间通信(IPC)的比较
  • Baumer高防护相机如何通过YoloV8深度学习模型实现网球运动员和网球速度的检测分析(C#代码UI界面版)