验证中...
开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约
语言: C/C++
分类: 嵌入式开发
最后更新于 2018-12-09 10:36
片段 1 片段 2
main.c
原始数据 复制代码
#include "includes.h"
#define u32 uint_32
#define u8 uint_8
int main()
{
u32 counter=0;
u8 flag=0;
u8 state_flag=0;
//step1:配置寄存器地址
//step1.1:计算引脚寄存器地址PORTx_PCRn=4004_9000+x*1000+n*4
volatile u32 *PORTB_PCR=(u32*)0x4004A000u; //端口B引脚控制寄存器基地址
//配置各个引脚的地址
volatile u32 *PORTB_PCR_red=PORTB_PCR+19;
volatile u32 *PORTB_PCR_green=PORTB_PCR+18;
volatile u32 *PORTB_PCR_blue=PORTB_PCR+9;
//step1.2:计算数据方向寄存器、数据输出寄存器、输出反转寄存器地址
//各组GPIO寄存器基地址PORTx=400F+F000h+40h*x
volatile u32 *GPIOB_ba=(u32*)0x400FF040;
//数据方向寄存器地址
volatile u32 *GPIOB_pddr=GPIOB_ba+5;
//数据输出寄存器地址
volatile u32 *GPIOB_pdor=GPIOB_ba+0;
//输出反转寄存器地址
volatile u32 *GPIOB_ptor=GPIOB_ba+3;
//step2:设定引脚为GPIO引脚,令引脚寄存器的8-10位=001
*PORTB_PCR_red=0x00000100;
*PORTB_PCR_green=0x00000100;
*PORTB_PCR_blue=0x00000100;
//step3:设定引脚为输出
*GPIOB_pddr|=(1<<19);
*GPIOB_pddr|=(1<<18);
*GPIOB_pddr|=(1<<9);
//step4:设定输出为高电平(灯暗)
*GPIOB_pdor|=(1<<19);
*GPIOB_pdor|=(1<<18);
*GPIOB_pdor|=(1<<9);
while(1)
{
counter++;
if(counter>=counter_max)
{
counter=0;
state_flag++;
if(state_flag%2==0) flag=0;
else if(state_flag<=1) flag=1;
else if(state_flag<=5) flag=2;
else if(state_flag<=11) flag=3;
else state_flag=0;
switch(flag)
{
case 0:
*GPIOB_pdor|=(1<<19);
*GPIOB_pdor|=(1<<18);
*GPIOB_pdor|=(1<<9);
break;
case 1://red取反
*GPIOB_ptor|=(1<<19);
*GPIOB_pdor|=(1<<18);
*GPIOB_pdor|=(1<<9);
break;
case 2://green取反
*GPIOB_pdor|=(1<<19);
*GPIOB_ptor|=(1<<18);
*GPIOB_pdor|=(1<<9);
break;
case 3://blue取反
*GPIOB_pdor|=(1<<19);
*GPIOB_pdor|=(1<<18);
*GPIOB_ptor|=(1<<9);
break;
default:
flag=0;
break;
}
}
}
}
includes.h
原始数据 复制代码
#ifndef includes_h
#define includes_h
#include "common.h"
#define counter_max 1500000u
#endif

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助