ARM裸机程序开发之led流水灯程序

/****************************************************************
*tiny 6410 开发板  led流水灯程序
* 要做的任务是:首先要看pcb 文件  识别led连到那些管脚上了
* GPK4 -- LED1
* GPK5 -- LED2
* GPK6 -- LED3
* GPK7 -- LED4
* 控制这四个管脚输出高低电平 来实现流水等的功能
*
AUTHOR:kong-hua-sheng 2014-1-6
******************************************************************/



#include"def.h"
#include"gpio.h"


/*定义led管脚点亮发光二极管和 熄灭发光二极管得电平*/
#define LED1_ON ~(1<<4) //得到0x0111 然后用这个数和 data寄存器中的数相与即可设置对用管脚为低电平
#define LED2_ON ~(1<<5)
#define LED3_ON ~(1<<6)
#define LED4_ON ~(1<<7)




/*定义熄灭led管脚的电平*/
#define LED1_OFF (1<<4) //得到ox1000 拿这个数和 data寄存器中的数据相或 运算
#define LED2_OFF (1<<5)
#define LED3_OFF (1<<6)
#define LED4_OFF (1<<7)
#define LED_ALL_OFF (0xf<<4)


/**/
#define GPIO_BASE (0x7F008000) //GPIO的起始地址


#define GPIO  ((volatile oGPIO_REGS *)GPIO_BASE)//将起始地址 宏定义为 GPIO


/*如何操作寄存器是值得考虑的  操作寄存器的位 但是不改变其它位的值*/




void LedPortInit(void);
void delay(int ms);
void LedRun(void);




int main(void)
{
LedPortInit();//对led管脚的初始化  包括输入输出配置
LedRun(); //流水灯的功能的实现
}


/*管脚初始化函数  对管脚的输入输出配置*/
void LedPortInit(void)
{
u32 uConValue; //u32是一个宏定义 在def.h中 这里定义了一个32位的变量 用来实现寄存器配置的变量
uConValue = GPIO->rGPIOKCON0;/ /将寄存器中的值 传递到uConValue中
/*配置GPK管脚的4-7位管脚为输出*/
uConValue &= ~(0xffff<<16);/ /由于是4位控制一个管脚的工作方式 ---取反0x0000ffff 之后相与 得 0x0000xxxx

uConValue   |= (0x1111<<16);/ /将4-7管脚对应的 控制位 设置为输出  得到的uConValue =0x1111xxxx这就是最后的配置数据

GPIO->rGPIOKCON0 = uConValue;
}


/*延时函数*/
void delay(int ms)
{
int i;
for(;ms>0;ms--)
for(i=1000;i>0;i--);
}


void LedRun(void)
{
GPIO->rGPIOKDAT |= LED_ALL_OFF; //将熄灯的数据 传递到 数据寄存器中去
while(1)
{
GPIO->rGPIOKDAT &= LED1_ON;
delay(1000);
GPIO->rGPIOKDAT |= LED_ALL_OFF;
delay(1000);

GPIO->rGPIOKDAT &= LED2_ON;
delay(1000);
GPIO->rGPIOKDAT |= LED_ALL_OFF;
delay(1000);

GPIO->rGPIOKDAT &= LED3_ON;
delay(1000);
GPIO->rGPIOKDAT |= LED_ALL_OFF;
delay(1000);

GPIO->rGPIOKDAT &= LED4_ON;
delay(1000);
GPIO->rGPIOKDAT |= LED_ALL_OFF;
delay(1000);
}
}

你可能感兴趣的:(Linux)