c语言多文件 6410 led裸机程序

发布者:genius6最新更新时间:2020-03-09 来源: eefocus关键字:c语言  多文件  led  裸机程序 手机看文章 扫描二维码
随时随地手机看文章

// led4 gpk7 

// led3 gpk6

// led2 gpk5     

// led1 gpk4   0 ,light 

//u32 rGPIOKCON0; //0x7f008800

// u32 rGPIOKCON1; //0x7f008804

// u32 rGPIOKDAT; //0x7f008808

//u32 rGPIOKPUD; //0x7f00880c

 

 

#include "def.h"

#include "gpio.h"

 

 

#define led1on  ~(1<<4)

#define led2on ~(1<<5)

#define led3on ~(1<<6)

#define led4on ~(1<<7)

 

 

 

void LedInit()

{

u32 TEMP;

GPIO->rGPIOKCON0 = 0X11112222;

TEMP = GPIO->rGPIOKPUD ;

TEMP &= (0XFF<<8);

TEMP = TEMP|(0XAA<<8);

GPIO->rGPIOKPUD = TEMP;

TEMP = GPIO->rGPIOKDAT ;

TEMP = TEMP&(0X0F);

GPIO->rGPIOKDAT = TEMP;

}

void delay(int times)

{

    int i;

    for(;times>0;times--)

      for(i=0;i<3000;i++);

}

 

void Led(char num,char flag)

{

u32 temp;

temp = GPIO->rGPIOKDAT;

switch(num){

case 1:  { if(flag) temp = temp&(led1on);

else  temp |=temp | (~led1on);

GPIO->rGPIOKDAT = temp;break;}

case 2:{ if(flag) temp = temp&(led2on);

else  temp |=temp | (~led2on);

GPIO->rGPIOKDAT = temp;break;}

case 3:{ if(flag) temp = temp&(led3on);

else  temp |=temp | (~led3on);

GPIO->rGPIOKDAT = temp;break;}

case 4:{ if(flag) temp = temp&(led4on);

else  temp |=temp | (~led4on);

GPIO->rGPIOKDAT = temp;break;}

default : break;

}

}

int main()

{

 

LedInit();

delay(1000);

while(1)

{

   Led(1,1);

   delay(1000);

   Led(1,0);

   delay(1000);

}

}

上面是c代码,main();


/**************************************************************************************

* Project Name : S3C6410 Validation

*

* Copyright 2006 by Samsung Electronics, Inc.

* All rights reserved.

*

* Project Description :

* This software is only for validating functions of the S3C6410.

* Anybody can use this software without our permission.

*  

*--------------------------------------------------------------------------------------

* File Name : gpio.h

*  

* File Description : This file declares prototypes of GPIO API funcions.

*

* Author : Heemyung.Noh

* Dept. : AP Development Team

* Created Date : 2006/12/26

* Version : 0.1 

* History

* - Created(Heemyung.Noh 2006/12/26)

*     - Added EINT (Wonjoon.jang 2007/01/03)

*  

**************************************************************************************/

 

#ifndef __GPIO_H__

#define __GPIO_H__

 

#ifdef __cplusplus

extern "C" {

#endif

 

#include "def.h"

#include "sfr6410.h"

 

 

#define Low_Level 0x0

#define High_Level 0x1

#define Falling_Edge 0x2

#define Rising_Edge 0x4

#define Both_Edge 0x6

 

#define GPIO ( ( volatile oGPIO_REGS * ) (GPIO_BASE))

 

 

typedef struct tag_GPIO_REGS

{

u32 rGPIOACON; //0x7F008000

u32 rGPIOADAT;

u32 rGPIOAPUD;

u32 rGPIOACONSLP;

u32 rGPIOAPUDSLP;

u32 reserved1[3];

u32 rGPIOBCON; //0x7F008020

u32 rGPIOBDAT;

u32 rGPIOBPUD;

u32 rGPIOBCONSLP;

u32 rGPIOBPUDSLP;

u32 reserved2[3];

u32 rGPIOCCON; //0x7F008040

u32 rGPIOCDAT;

u32 rGPIOCPUD;

u32 rGPIOCCONSLP;

u32 rGPIOCPUDSLP;

u32 reserved3[3];

u32 rGPIODCON; //0x7F008060

u32 rGPIODDAT;

u32 rGPIODPUD;

u32 rGPIODCONSLP;

u32 rGPIODPUDSLP;

u32 reserved4[3];

u32 rGPIOECON; //0x7F008080

u32 rGPIOEDAT;

u32 rGPIOEPUD;

u32 rGPIOECONSLP;

u32 rGPIOEPUDSLP;

u32 reserved5[3];

u32 rGPIOFCON; //0x7F0080A0

u32 rGPIOFDAT;

u32 rGPIOFPUD;

u32 rGPIOFCONSLP;

u32 rGPIOFPUDSLP;

u32 reserved6[3];

u32 rGPIOGCON; //0x7F0080C0

u32 rGPIOGDAT;

u32 rGPIOGPUD;

u32 rGPIOGCONSLP;

u32 rGPIOGPUDSLP;

u32 reserved7[3];

u32 rGPIOHCON0; //0x7F0080E0

u32 rGPIOHCON1;

u32 rGPIOHDAT;

u32 rGPIOHPUD;

u32 rGPIOHCONSLP;

u32 rGPIOHPUDSLP;

u32 reserved8[2];

 

u32 rGPIOICON; //0x7F008100

u32 rGPIOIDAT;

u32 rGPIOIPUD;

u32 rGPIOICONSLP;

u32 rGPIOIPUDSLP;

u32 reserved9[3];

 

u32 rGPIOJCON; //0x7F008120

u32 rGPIOJDAT;

u32 rGPIOJPUD;

u32 rGPIOJCONSLP;

u32 rGPIOJPUDSLP;

u32 reserved10[3];

u32 rGPIOOCON; //0x7F008140

u32 rGPIOODAT;

u32 rGPIOOPUD;

u32 rGPIOOCONSLP;

u32 rGPIOOPUDSLP;

u32 reserved11[3];

 

u32 rGPIOPCON; //0x7F008160

u32 rGPIOPDAT;

u32 rGPIOPPUD;

u32 rGPIOPCONSLP;

u32 rGPIOPPUDSLP;

u32 reserved12[3];

 

u32 rGPIOQCON; //0x7F008180

u32 rGPIOQDAT;

u32 rGPIOQPUD;

u32 rGPIOQCONSLP;

u32 rGPIOQPUDSLP;

u32 reserved13[3];

 

u32 rSPCON; //0x7F0081A0

u32 reserved14[3];

u32 rMEM0CONSTOP; //0x7F0081B0

u32 rMEM1CONSTOP; //0x7F0081B4

u32 reserved15[2];

u32 rMEM0CONSLP0; //0x7F0081C0

u32 rMEM0CONSLP1; //0x7F0081C4

u32 rMEM1CONSLP; //0x7F0081C8

u32 reserved;

u32 rMEM0DRVCON; //0x7F0081D0

u32 rMEM1DRVCON; //0x7F0081D4

u32 reserved16[10];

 

u32 rEINT12CON; //0x7f008200

u32 rEINT34CON; //0x7f008204

u32 rEINT56CON; //0x7f008208

u32 rEINT78CON; //0x7f00820C

u32 rEINT9CON; //0x7f008210

u32 reserved17[3];

 

u32 rEINT12FLTCON; //0x7f008220

u32 rEINT34FLTCON; //0x7f008224

u32 rEINT56FLTCON; //0x7f008228

u32 rEINT78FLTCON; //0x7f00822C

u32 rEINT9FLTCON; //0x7f008230

u32 reserved18[3];

 

u32 rEINT12MASK; //0x7f008240

u32 rEINT34MASK; //0x7f008244

u32 rEINT56MASK; //0x7f008248

u32 rEINT78MASK; //0x7f00824C

u32 rEINT9MASK; //0x7f008250

u32 reserved19[3];

 

u32 rEINT12PEND; //0x7f008260

u32 rEINT34PEND; //0x7f008264

u32 rEINT56PEND; //0x7f008268

u32 rEINT78PEND; //0x7f00826C

u32 rEINT9PEND; //0x7f008270

u32 reserved20[3];

 

u32 rPRIORITY; //0x7f008280

u32 rSERVICE; //0x7f008284

u32 rSERVICEPEND; //0x7f008288

u32 reserved21;

 

u32 reserved22[348];

u32 rGPIOKCON0; //0x7f008800

u32 rGPIOKCON1; //0x7f008804

u32 rGPIOKDAT; //0x7f008808

u32 rGPIOKPUD; //0x7f00880c

 

u32 rGPIOLCON0; //0x7f008810

u32 rGPIOLCON1; //0x7f008814

u32 rGPIOLDAT; //0x7f008818

u32 rGPIOLPUD; //0x7f00881c

 

u32 rGPIOMCON; //0x7f008820

u32 rGPIOMDAT; //0x7f008824

u32 rGPIOMPUD; //0x7f008828

u32 reserved23;

 

u32 rGPIONCON; //0x7f008830

u32 rGPIONDAT; //0x7f008834

u32 rGPIONPUD; //0x7f008838

u32 reserved24;

 

u32 reserved25[16];

 

u32 rSPCONSLP; //0x7f008880

 

u32 reserved26[31];

 

u32 rEINT0CON0; //0x7f008900

u32 rEINT0CON1; //0x7f008904

u32 reserved27[2];

 

u32 rEINT0FLTCON0; //0x7f008910

u32 rEINT0FLTCON1; //0x7f008914

u32 rEINT0FLTCON2; //0x7f008918

u32 rEINT0FLTCON3; //0x7f00891c

u32 rEINT0MASK; //0x7f008920

u32 rEINT0PEND; //0x7f008924

u32 reserved28[2];

u32 rSLPEN; //0x7f008930

 

oGPIO_REGS;

 

typedef enum GPIO_Id

{

// Value & 0xF000 : The muxing bit number of the configuration register

// Value & 0x0F00 : Control register number per each GPIO Port

// Value & 0x00FF : Offset from GPIO base address(Value * 0x10)

eGPIO_A = 0x4100,    // muxing bit : 4, control register : 1, offset : 0,

eGPIO_B = 0x4102,    // muxing bit : 4, control register : 1, offset : 0x02*0x10

eGPIO_C = 0x4104,    // muxing bit : 4, control register : 1, offset : 0x04*0x10

eGPIO_D = 0x4106,    // muxing bit : 4, control register : 1, offset : 0x06*0x10

eGPIO_E = 0x4108,    // muxing bit : 4, control register : 1, offset : 0x08*0x10

eGPIO_F = 0x210A,    // muxing bit : 2, control register : 1, offset : 0x0A*0x10

eGPIO_G = 0x410C,    // muxing bit : 4, control register : 1, offset : 0x0C*0x10

eGPIO_H = 0x420E,    // muxing bit : 4, control register : 2, offset : 0x0E*0x10

eGPIO_I = 0x2110,    // muxing bit : 2, control register : 1, offset : 0x10*0x10

eGPIO_J = 0x2112,    // muxing bit : 2, control register : 1, offset : 0x12*0x10

eGPIO_K = 0x4280,    // muxing bit : 4, control register : 2, offset : 0x80*0x10

eGPIO_L = 0x4281,    // muxing bit : 4, control register : 2, offset : 0x81*0x10

eGPIO_M = 0x4182,    // muxing bit : 4, control register : 1, offset : 0x82*0x10

eGPIO_N = 0x2183,    // muxing bit : 2, control register : 1, offset : 0x83*0x10

eGPIO_O = 0x2114,    // muxing bit : 2, control register : 1, offset : 0x14*0x10

eGPIO_P = 0x2116,    // muxing bit : 2, control register : 1, offset : 0x16*0x10

eGPIO_Q = 0x2118    // muxing bit : 2, control register : 1, offset : 0x18*0x10

}

GPIO_eId;

 

typedef enum GPIO_BitPos

{

eGPIO_0 = (u32)(0),

eGPIO_1 = (u32)(1),

eGPIO_2 = (u32)(2),

eGPIO_3 = (u32)(3),

eGPIO_4 = (u32)(4),

eGPIO_5 = (u32)(5),

eGPIO_6 = (u32)(6),

eGPIO_7 = (u32)(7),

eGPIO_8 = (u32)(8),

eGPIO_9 = (u32)(9),

eGPIO_10 = (u32)(10),

eGPIO_11 = (u32)(11),

eGPIO_12 = (u32)(12),

eGPIO_13 = (u32)(13),

eGPIO_14 = (u32)(14),

eGPIO_15 = (u32)(15)

}GPIO_eBitPos;

 

/*

typedef enum INT_TYPE

{

Low = (u32) 0x0,

High = (u32) 0x1,

Falling = (u32) 0x2,

Rising = (u32) 0x4,

Both = (u32) 0x6

}INT_eTYPE;

*/

 

typedef enum FLT_TYPE

{

eDisFLT = (u32) 0x0,

eEnFLT = (u32) 0x1, // EINT Group 1~9

eDLYFLT = (u32) 0x2, // 2'b10 => Filter Enable, Delay Filter

eDIGFLT = (u32) 0x3

}FLT_eTYPE;

 

typedef enum LCD_TYPE

{

eHOSTIF = 0,

eRGBIF = 1,

eYCbCr = 2,

eHidden = 3

}LCD_eTYPE;

 

void GPIO_Init(void);

void GPIO_SetFunctionEach(GPIO_eId Id, GPIO_eBitPos eBitPos, u32 uFunction);

void GPIO_SetFunctionAll(GPIO_eId Id, u32 uValue0, u32 uValue1);

void GPIO_SetDataEach(GPIO_eId Id, GPIO_eBitPos eBitPos, u32 uValue);

void GPIO_SetDataAll(GPIO_eId Id, u32 uValue);

u32 GPIO_GetDataAll(GPIO_eId Id);

void GPIO_SetPullUpDownEach(GPIO_eId Id, GPIO_eBitPos eBitPos, u32 uValue);

void GPIO_SetPullUpDownAll(GPIO_eId Id, u32 uValue);

void GPIO_SetConRegSleepAll(GPIO_eId Id, u32 uValue);

void GPIO_SetPullUDSleepAll(GPIO_eId Id, u32 uValue);

 

void GPIO_SetLCDType(LCD_eTYPE eLCDType);

 

// EINT Group0 => Wakeup Source

void GPIO_SetEint0(u32 uEINT_No , u32  eIntType, FLT_eTYPE eFltType,  u32 uFltWidth);

void GPIO_EINT0ClrPend(u32 uEINT_No );

void GPIO_EINT0DisMask(u32 uEINT_No );

void GPIO_EINT0EnMask(u32 uEINT_No );

 

[1] [2]
关键字:c语言  多文件  led  裸机程序 引用地址:c语言多文件 6410 led裸机程序

上一篇:内存控制器与SDRAM
下一篇:6410_scatter.txt

推荐阅读最新更新时间:2024-11-11 00:38

【stm32f103】GPIO原理以及LED的应用(寄存器版)
一.硬件原理图 有两个LED灯D1,D2,分别对应的PIN是PB6,PB7,低电平时点亮LED灯 二.寄存器图 通用GPIO寄存器一共有以下几个寄存器 寄存器可以参考 参考手册,在这里不做详细讨论 三.编程步骤: 1.使能响应的GPIO时钟 2.配置通用GPIO为推挽输出(因为默认低电平,所以此时LED灯会亮起来) 3.输出低电平,熄灭LED灯 4.再次通过程序点亮LED灯 四.程序讲解 代码比较简单,只有几行 /* 1.ENABLE GPIOB CLOCK */ RCC- APB2ENR|= RCC_APB2ENR_IOPBEN; 运行这个,可以在debug中看到GPIOB clock由di
[单片机]
【stm32f103】GPIO原理以及<font color='red'>LED</font>的应用(寄存器版)
stm32f429 中通过基本定时器中断控制LED灯亮一秒、灭一秒
stm32f429中基本定时器有两个,通用定时器有十个,高级定时器有两个。其中基本定时器为TIM6和TIM7。 此处通过编写TIM7定时中断控制LED灯亮灭,TIM6与之类似。 首先可以新建一个.c 和.h 文件,在.c文件中进行TIM7函数定义等,如下图所示: #include bsp_tim_basic.h static void BASIC_TIMx_Mode_Config() { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);//开启时钟 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//结构体
[单片机]
C51编程1-输出电平(点亮LED1)
51单片机中,有4个组I/O口,分别是P0、P1、P2、P3;I/O(Input/Output)口,Input表示输入电平信号,Out表示输出电平信号。在数字电路中,电平有高低电平两种,也就是说I/O口,这个端口可以输入或者输出高低电平。 不同数字电路系统中,对于电平的定义的电压不一样。而在STC89C52中5V的系统中(如下图所示),低于0.8V被识别为低电平,而高于2.0V被识别为高电平。 LED电路原理图: 在51单片机系统中,LED正极接电源VCC(5V),负极接串联一个470欧电阻,连接到单片接P2。 LED点亮原理 : 以P20口为例说明,LED可以点亮的原理。 当单片机P20口的引脚为高电平,
[单片机]
C51编程1-输出电平(点亮<font color='red'>LED</font>1)
LED灯更节能环保的优势何在?
2014年的诺贝尔物理学奖让发光二极管成为了公众关心的焦点。近些年来,从发光二极管提供背光的液晶显示器到由其提供 照明 的台灯,这种新型的照明方式正在越来越多地出现在我们的生活中。那么,发光二极管与传统照明方式相比,有哪些优点,它又是如何为我们提供照明的呢?    白炽:并不高明的发光   在了解发光二极管的工作原理以及它为什么更加节能之前,我们不妨来看一下传统的白炽灯,也就是俗称的电灯泡是如何发光的。   如果我告诉你,我们身边的所有物体都在发光,你可能会觉得非常惊讶。是呀,常识告诉我们,天空中只有恒星能发光,连月亮都是反射光;生活中除了电灯、蜡烛等,没看见其他的物体也在发光呀?   科学家告诉我们,任何物体只要它
[电源管理]
<font color='red'>LED</font>灯更节能环保的优势何在?
大功率LED封装工艺及发展趋势
   LED封装 的主要目的是实现 LED芯片 和外界电路的电气互连与机械接触,保护 LED 免受机械、热、潮湿等外部冲击,实现光学方面的要求,提高出光效率,满足芯片散热要求,提高其使用性能和可靠性。   LED封装设计主要涉及光学、热学、电学和机械(结构)等方面,这些因素彼此相互独立,又相互影响,其中光是LED封装的目的,热是关键,电和机械是手段,而性能是具体体现。   当前高效率,大功率是LED的主要发展方向之一,各国及研究机构均致力于高性能LED芯片的研究:表面粗化、倒金字塔结构、透明衬底技术、优化电极几何形状、分布布拉格反射层、激光衬底剥离技术、微结构和光子晶体技术等。    大功率LED 封装由于结构和
[电源管理]
盘点几种主流LED驱动方式及驱动电源
LED 是特性敏感的半导体器件,又具有负温度特性,因而在应用过程中需要对其进行稳定工作状态和保护,从而产生了驱动的概念。LED器件对驱动电源的要求近乎于苛刻,LED不像普通的白炽灯泡,可以直接连接220V的交流市电。LED是3伏左右的低电压驱动,必须要设计复杂的变换电路,不同用途的 LED灯,要配备不同的电源适配器。国际市场上国外客户对 LED驱动 电源的效率转换、有效功率、恒流精度、电源寿命、电磁兼容的要求都非常高,设计一款好的电源必须要综合考虑这些因数,因为电源在整个灯具中的作用就好比像人的心脏一样重要。   由于受到LED功率水平的限制,通常需同时驱动多个LED以满足亮度需求,因此,需要专门的驱动电路来点亮LED。下面简要
[电源管理]
51单片机实验3:led流水灯
开发板led模块电路图如下: 循环左/右移函数头文件为 intrins.h #include reg52.h #include intrins.h #define uc unsigned char void delay(uc n) { uc i,j; for(i=1;i =n;i++) for(j=110;j =1;j--); } void main() { P2=0xFE; while(1) { delay(200); p2=_crol_(P2,1); delay(200); } }
[单片机]
51单片机实验3:<font color='red'>led</font>流水灯
第七章:LED将为我闪烁:控制发光二极管
在之前章节了解到Linux驱动程序可以控制软硬件,可以实现软硬件之间的交互。在这章我们学习LED驱动的实现原理。Linux内核提供了多个与I/O内存交互的函数可以实现控制硬件。 编写LED驱动,LED驱动会建立一个/dev/s3c6410_leds设备文件,该Linux驱动可以控制4个LED,靠近电池的LED编号为1,以此类推,另外1表示开,0表示关。接下来创建LED驱动的设备文件:第一步:使用cdev_init函数初始化cdev;第二步:指定设备号;第三步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中;第四步:使用class_create宏创建struct class;第五步:使用device_create函
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved