Exynos 4412又称为Exynos 4 Quad,Exynos 4412采用了三星32nm HKMG工艺,是三星的第一款四核处理器。
1.查看原理图,分析LED灯的工作条件(亮/灭),以LED2为例:
由原理图可知:GPX2_7输出高电平时LED亮;GPX2_7输出低电平时LED灭。
2根据底板PDF原理图找到外设和SOC之间的物理连接引脚:GPX2_7
3.打开芯片用户手册,找到对应的章节(GPIO章节),先看下概述了解硬件引脚情况,根据需要(控制LED灯)选择引脚的功能为I/O功能,设置相应寄存器(CON控制,DAT输入/输出数值。)
找到GPX2相关内容:
//设置引脚功能为output
GPX2.CON &= ~(0xf<<28);//将CON寄存器高四位清零
GPX2.CON |= (1<<28);//将CON寄存器设置为output功能
当您将端口配置为输入端口时相应的位是引脚状态。 配置为时输出端口然后引脚状态应该相同相应的位。 端口配置为功能引脚时,将读取未定义的值。
配置寄存器DAT,来封装LED开关函数:
void led_on(void)
{
// IO_DAT |= (1<<7);
GPX2.DAT |= (1<<7);
}
void led_off(void)
{
// IO_DAT &= ~(1<<7);
GPX2.DAT &= ~(1<<7);
}
4.写代码
具体寄存器从exynos_4412.h头文件中查找,查找方法是根据寄存器名在文件中检索.。
#include "exynos_4412.h"
//#define IO_CON (*((unsigned int *)0x11000c40))
//#define IO_DAT (*((unsigned int *)0x11000c44))
//封装延时函数
void delay(unsigned int time)
{
int i;
for(; time>0; time--)
{
for(i=2000; i>0; i--)
{
;
}
}
}
void led_init(void)
{
//1、设置引脚功能为output
// IO_CON &= ~(0xf<<28);
// IO_CON |= (1<<28);
GPX2.CON &= ~(0xf<<28);
GPX2.CON |= (1<<28);
//2、默认关闭led
// IO_DAT &= ~(1<<7);
GPX2.DAT &= ~(1<<7);
}
void led_on(void)
{
// IO_DAT |= (1<<7);
GPX2.DAT |= (1<<7);
}
void led_off(void)
{
// IO_DAT &= ~(1<<7);
GPX2.DAT &= ~(1<<7);
}
int main(void)
{
led_init();
while(1)
{
led_on();
delay(500);
led_off();
delay(500);
}
return 0;
}
实验现象:led闪烁。
PWM是Pulse Width Modulation脉冲宽度调制的缩写,简称脉宽调制。他是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术。
1.PWM实质就是按我们的需求输出的一定规则波形的信号,PWM实验的实质就是控制定时器输出PWM
2.查找原理图找到buzzer和SOC之间连接的物理引脚是GPD0_0
3.打开用户手册,找到第6章GPIO,设置对应的CON寄存器选择TOUT功能
//CON寄存器选择TOUT功能
GPD0.CON &= ~(0xf<<0);
GPD0.CON |= (2<<0);
4.找到第24章PWM章节,先看下章节概述,了解下本章节基本信息
5.在24.1概述章节中,从概述描述结合Figure 24-2图,可以知道定时器需要有个时钟信号输入, 并经过2次分频后才到达定时器。
6.从Figure 24-1图和步骤描述,可以知道产生PWM的具体操作步骤
7.从24.3.5章节中了解到如何初始化寄存器的步骤
8.阅读24.5.1章节,了解相关寄存器功能
9.根据上述过程获取的信息写代码控制相关寄存器
// 一级分频:249
PWM.TCFG0 &= ~(0xff<<0);
PWM.TCFG0 |= (249<<0);
二级分频:4
PWM.TCFG1 &= ~(0xf<<0);
PWM.TCFG1 |= (2<<0);
//设置周期:1000Hz,占空比50%
PWM.TCNTB0 = 100;
PWM.TCMPB0 = PWM.TCNTB0 / 2
//手动更新TCNT和TCMP
PWM.TCON |= (1<<1);
PWM.TCON &= ~(1<<1);
//开启自动重装载
PWM.TCON |= (1<<3);
//启动定时器
PWM.TCON |= (1<<0);
10、代码
寄存器从exynos_4412.h头文件中查找,查找方法是根据寄存器名在文件中检索.。
#include "exynos_4412.h"
void pwm_init(void)
{
//1、选择引脚功能pwmTOU0输出功能
GPD0.CON &= ~(0xf<<0);
GPD0.CON |= (2<<0);
//2、一级分频:249
PWM.TCFG0 &= ~(0xff<<0);
PWM.TCFG0 |= (249<<0);
//3、二级分频:4
PWM.TCFG1 &= ~(0xf<<0);
PWM.TCFG1 |= (2<<0);
//4、设置周期:1000Hz,占空比50%
PWM.TCNTB0 = 100;
PWM.TCMPB0 = PWM.TCNTB0 / 2;
//5、手动更新TCNT和TCMP
PWM.TCON |= (1<<1);
PWM.TCON &= ~(1<<1);
//6、开启自动重装载
PWM.TCON |= (1<<3);
//7、启动定时器
PWM.TCON |= (1<<0);
}
int main(void)
{
pwm_init();
while(1)
{
;
}
return 0;
}
实验现象:蜂鸣器响。