当前位置: 移动技术网 > 网络运营>服务器>Linux > 嵌入式linux-ARM体系结构及接口技术,ARM波形控制,PWM配置

嵌入式linux-ARM体系结构及接口技术,ARM波形控制,PWM配置

2020年05月01日  | 移动技术网网络运营  | 我要评论
文章目录1,串口设备1.1, UART 协议1.2,uart 串口波形1.3,例2,I2C 设备2.1,I2C 协议2.1,I2C 波形3,PWM 蜂鸣器3.1,PWM 蜂鸣器3.2,配置pwm3.2.1,设置GPI/O为PWM模式3.2.2,设置pwm频率3.2.2.1,第一级分频TCFG03.2.2.2,第二级分频3.2.2.3,第三级分频3.2.3,设置占空比3.2.4,启动定时器3.3,设...

1,串口设备

1.1, UART 协议

在这里插入图片描述

1.2,uart 串口波形

发送 0xFF 0X00 0X04 0X08数据
串行通信参数设置:BAUD:115200,8位数据,1个停止位,无奇偶校验,发送顺序为低位先发送。

在这里插入图片描述

波形实现方法:

  1. CPU 已实现,仅需设置寄存器
  2. GPIO管脚模拟波形

1.3,例

//发送0x04 数据
void uart_tx(void)
{
	GPA1CON = GPA1CON&~0xf<<4)|(0x01<<4);  //设置GPA1_1 GPIO输出模式
	
	//开始位
	GPA1DAT = GPA1DAT&~0x02 ;  //设置GPA1_1 低电平 
	delay10ms();  
	//传数据 0x04   0000 0100
	delay10ms();  //0
	delay10ms();  //0	 
  GPA1DAT = GPA1DAT|0x02 ; //1
  delay10ms();	
	GPA1DAT = GPA1DAT&~0x02 ;  //设置GPA1_1 低电平 
	delay10ms();  	//0
	delay10ms();  	//0	
	delay10ms();  	//0	
	delay10ms();  	//0
	//停止位
  GPA1DAT = GPA1DAT|0x02 ; //1
 	delay10ms();   		
}


void uart_rx(void)
{
	  unsigned char output=0;
		GPA1CON = GPA1CON&~0xf);  //设置GPA1_1 GPIO输入模式
    //检测开始位
    while(1)
    {
    	 if(GPA1DAT&0x01==0)
    	 	break;
      delay10ms();
    }
    //接收数据
    if(GPA1DAT&0x01==0)  //bit0
    	 	 output=0;
    else
    	   output=1;	 
    if(GPA1DAT&0x01==0)  //bit1  	   
     	 	 output=output&~(0x01<<1);       	   
     else                	    	  
     	   output=output|(0x01<<1);	  

    if(GPA1DAT&0x01==0)  //bit2  	  
     	 	 output=output&~(0x01<<2);  
     else                	    	    
     	   output=output|(0x01<<2);	 
     	   ....
     	    	
	
}

2,I2C 设备

2.1,I2C 协议

双线 i2c (半双工 同步)
支持一主机对多从机
可主从切换

在这里插入图片描述

支持一主机对多从机
可主从切换

在这里插入图片描述

2.1,I2C 波形

往ID为0x3c的I2C 设备写数据 0x2e 0x2e ...
1.由主机发起,在SCL为高电平时,SDA由高到低切 变,形成开始信号;
2.接着是7位地址和一位读写标志,这里7位地址为0111100,即0x3c,正是我们代码中设置的地址ID;最后一位为0表示写操作;
3.接着在下一个时钟,主机以高电平状态释放SDA,这时从机响应,将SDA拉低了;
4.接着是两个8位数据00101110与响应,即0x2E,
5.还有其它数据和最后的停止位,图中被截掉了

3,PWM 蜂鸣器

PWM(Pulse Width Modulation) :
脉冲宽度调制 。常见应用有:电机控制,DAC输出等
占空比:
就是输出的PWM中,高电平保持的时间 与该PWM的时钟周期的时间之比

3.1,PWM 蜂鸣器

在这里插入图片描述

在这里插入图片描述

3.2,配置pwm

3.2.1,设置GPI/O为PWM模式

在这里插入图片描述
在这里插入图片描述

GPD0CON = (GPD0CON & ~(0X00F << 0)) | (0x02 << 0);  	//1.设置GPD0_0为PWM模式

3.2.2,设置pwm频率

在这里插入图片描述
在这里插入图片描述

3.2.2.1,第一级分频TCFG0

在这里插入图片描述

TCFG0 = (TCFG0 & ~(0XFF << 0)) | (100 << 0); 	//第一级分频100

3.2.2.2,第二级分频

在这里插入图片描述

TCFG1 = (TCFG1 & ~(0X0F << 0)) | (0x03 << 0); 	//第二级分频8

3.2.2.3,第三级分频

在这里插入图片描述

TCNTB0 = 200; 									//第三级分频200

3.2.3,设置占空比

在这里插入图片描述

在这里插入图片描述

TCMPB0 = 100; 			//3.设置占空比为50%

3.2.4,启动定时器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//4.启动定时器
//TCON = (TCON & ~(0x0f << 0)) | (0x0b << 0);		//定时器启动设置(定时器开启,波形不翻转,更新定时器初值,自动重装载)
TCON = (TCON & ~(0x0f << 0)) | (0x0a << 0);		//先配置,先不启动
TCON = (TCON & ~(0x0f << 0)) | (0x09 << 0);		//配置好了再启动

3.4,例

#define GPD0CON 		(*(volatile unsigned int *)0x114000a0)  //
#define TCFG0 			(*(volatile unsigned int *)0x139d0000)  //pwm第一级分频,设置Prescaler
#define TCFG1 			(*(volatile unsigned int *)0x139d0004)  //pwm第二级分频
#define TCNTB0 			(*(volatile unsigned int *)0x139d000c)  //pwm第三级分频
#define TCMPB0 			(*(volatile unsigned int *)0x139d0010)  //设置占空比
#define TCON 			(*(volatile unsigned int *)0x139d0008)  //定时器启动设置(定时器开启,波形翻转,更新定时器初值,自动重装载)

#define ON 1
#define OFF 2
void pwm_init()
{
	//*********外部   配置GPIO***********************************
	//1.设置GPD0_0为PWM模式
	GPD0CON = (GPD0CON & ~(0X00F << 0)) | (0x02 << 0); 

	//*********内部   配置PWN功能块***************************************
	//2.设置PWM周期为625Hz
	TCFG0 = (TCFG0 & ~(0XFF << 0)) | (100 << 0); 	//第一级分频100
	TCFG1 = (TCFG1 & ~(0X0F << 0)) | (0x03 << 0); 	//第二级分频8
	TCNTB0 = 200; 									//第三级分频200

	//3.设置占空比为50%
	TCMPB0 = 100;

	//4.启动定时器
 	//TCON = (TCON & ~(0x0f << 0)) | (0x0b << 0);		//定时器启动设置(定时器开启,波形不翻转,更新定时器初值,自动重装载)
 	TCON = (TCON & ~(0x0f << 0)) | (0x0a << 0);		//先配置,先不启动
 	TCON = (TCON & ~(0x0f << 0)) | (0x09 << 0);		//配置好了再启动

}
void pwm_beep(int on_off)
{
	if(on_off == ON)
	{	
 		TCON = (TCON & ~(0x01 << 0)) | (0x01 << 0);		//启动定时器(beep)
	}
	else if(on_off == OFF)
	{
 		TCON = (TCON & ~(0x01 << 0)) | (0x00 << 0);		//关闭定时器(beep)
	}
}

本文地址:https://blog.csdn.net/m0_37542524/article/details/85947369

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网