个人主页: 长夜漫漫想学习
本文收录专栏: ARM学习之路
其他专栏: C语言学习之路
学习格言:路漫漫其修远兮,吾将上下而求索
欢迎点赞、关注、收藏( •̀ ω •́ )✧ 一起努力,一起学习!
目录
1、UART串口实验
1.1、通信方式
2、UART资料查询
2.1、电路原理图
2.2、UART框图
2.3、UART AFC接口
2.4、UART的输入时钟图
2.5、UART描述
2.6、控制指定位
2.7、GPA1CON
2.8、UTRSTATn(状态寄存器)
2.9、发送和接收缓冲区寄存器
2.10、波特率
3、UART通信程序
4、Watchdog
4.1、看门狗定时器框图
4.2、看门狗定时器描述
4.3、配置寄存器
4.4、数据与计数寄存器
4.5、Watchdog程序
uart:通用异步收发传输器,是设备之间进行异步通信的模块(硬件) 负责处理数据总线和串行口的串/并转换,并规定了通信方式,uart可以实现全双工的通信(发送和接收),通过两根信号线完成(Tx,Rx) 使用uart进行通信时,通常需要添加—个合适的电平转换器。
串行:每位数据,依次顺序传输
并行:多位数据,齐头并进同时传输
单工:规定只能由一端发送到另一端,规定了发送方和接收方
半双工:可以进行双向通信,但是同一时刻只能完成发送或接收一个操作 全双工:可以同时进行双向通信
同步:发送方在发送数据时,同时会发送一个同步的时钟信号,用于同步发送方和接收方的数据采样频率
异步:异步通信是以字节为单位发送,同一个字符中的相邻两位的时间间隔是固定的,不同的字符间的时间间隔不确定,发送方和接收方进行确定以固定(相同)的频率进行采样
硬件设备连接:
通信设备 芯片
Tx----------------------Rx
Rx-------—------------TX
传输的数据帧是可编程的,由线路控制指定位组成
控制指定位
1个起始位
5至8个数据位
可选的奇偶校验位
1到2个停止位
采用FIFO的Rx操作
采用FIFO的Tx操作
Exynos 4412 SCP为UART提供多种时钟。
UART使用SCLK_UART 时钟,来自时钟控制器。
#define GPA1CON *((unsigned int *)0x11400020)
#define ULCON2 *((unsigned int *)0x13820000)
#define UCON2 *((unsigned int *)0x13820004)
#define UBRDIV2 *((unsigned int *)0x13820028)
#define UFRACVAL2 *((unsigned int *)0x1382002c)
#define UTXH2 *((unsigned int *)0x13820020)
#define URXH2 *((unsigned int *)0x13820024)
#define UTRSTAT *((unsigned int *)0x13820010)
void myputs(char * str)
{
int i;
for(i = 0;str[i] != '\0'; i++)
{
//要发送数据一定要发送缓存寄存器为空,看状态寄存器,第一位为1就为空
while(UTRSTAT & 2 == 0); //等于0就一直在当前循环执行
UTXH2 = str[i];
}
}
void delay()//延时函数
{
int i =0,j = 0;
for(;i<1000000; i++)
{
for(;j < 1000000;j++);
}
}
int main()
{
//设置GPIO,引脚为UART模式,GPA1_0,GPA1_1
GPA1CON = GPA1CON & 0xff | 0x22;
char a;
//设置帧协议格式
ULCON2 = 3;
//控制寄存器,工作---有输出、输入(发送 接收)
UCON2 = UCON2 & ~(0xf) | 5;
//2、波特率设置
UBRDIV2 = 53;
UFRACVAL2 = 4;
while(1)
{
myputs("接收数据成功\n");
if( UTRSTAT & 1 != 0 ) //uart控制器接收到外部硬件的数据
{
UTXH2= URXH2; ; //返回数据内容
delay();
}
}
return 0;
}
Exynos 4412 SCP中的看门狗定时器(WDT)是一个定时器件。
支持带中断请求的正常间隔定时器模式。
如果定时器计数值达到0(超时),则激活内部复位信号。
支持电平触发的中断机制
WTCON寄存器:
允许您启用/禁用看门狗定时器
从四个不同的源中选择时钟信号
启用/禁用中断
启用/禁用看门狗定时器输出
#define WDTCON *((unsigned int *)0x10060000)
#define WDTDAT *((unsigned int *)0x10060004)
#define WDTCNT *((unsigned int *)0x10060008)
//初始化 wdt看门狗
void wdt_time()
{
//初始时钟频率100M hz
//设置预分配 250
WDTCON = WDTCON & ~(0xff<<8) | 249<<8;
//设置固定分频 128
WDTCON = WDTCON & ~(0x3<<3) | 0x3<<3;
//设置复位
WDTCON = WDTCON | 1;// WDTCON |= 1;
//设置定时时间,----5s
WDTDAT = 15625;//(存储定时时间)
WDTCNT = WDTDAT;
//启动看门狗
WDTCON |= 1<<5;
}
✨本篇到此结束啦!欢迎点赞收藏❤关注