jz2440重新学习----led篇

  学完(jz2440)新第一期后,还是有很多不会,所以再次重新学习来巩固一下。

 我是学STM32 差不多后,想进一步深入RAM的,就选了jz2440。

下面利用STM32库函数的结构来写jz2440。

1、下面代码s3c2440_gpio.h

enum GPIOx_CON{

	GPIOA 	= 	0x56000000,
	GPIOB 	= 	0x56000010,
	GPIOC 	= 	0x56000020,
	GPIOD 	= 	0x56000030,
	GPIOE 	= 	0x56000040,
	GPIOF 	= 	0x56000050,
	GPIOG 	= 	0x56000060,
	GPIOH 	= 	0x56000070,
	GPIOJ 	= 	0x56000080	
};//配对GPIOx组的地址

typedef enum {
	GPIO_Pin_0 		= 0X0001,
	GPIO_Pin_1 		= 0X0002,
	GPIO_Pin_2 		= 0X0004,
	GPIO_Pin_3 		= 0X0008,
	GPIO_Pin_4 		= 0X0010,
	GPIO_Pin_5 		= 0X0020,
	GPIO_Pin_6 		= 0X0040,
	GPIO_Pin_7 		= 0X0080,
	GPIO_Pin_8 		= 0X0100,
	GPIO_Pin_9 		= 0X0200,
	GPIO_Pin_10 	        = 0X0400,
	GPIO_Pin_11 	        = 0X0800,
	GPIO_Pin_12 	        = 0X1000,
	GPIO_Pin_13 	        = 0X2000,
	GPIO_Pin_14 	        = 0X4000,
	GPIO_Pin_15 	        = 0X8000,	
}GPIO_Pin_Typedef;//具体引脚设置

typedef enum {

	GPIO_Mode_IN 			= 0X0,
	GPIO_Mode_OUT 		= 0X1,
	GPIO_Mode_OTHER1 		= 0X2,
	GPIO_Mode_OTHER2 		= 0X3
	
}GPIOMode_Typedef;//GPIO的模式

typedef enum {

	PU_SET 		= 0X0,//yes
	PU_RESET 	= 0X1//no
	
}GPIOPu_TypeDef;//是否使能上拉

typedef struct {

	GPIO_Pin_Typedef GPIO_Pin;
	GPIOMode_Typedef GPIO_Mode;
	GPIOPu_TypeDef GPIO_Pu;
}GPIO_InitTypeDef;

void GPIO_Init(volatile unsigned int GPIOx,GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_SetBits(volatile unsigned int GPIOx,unsigned int GPIO_Pin);
void GPIO_ResetBits(volatile unsigned int GPIOx,unsigned int GPIO_Pin);
void GPIO_Write(volatile unsigned int GPIOx,unsigned int GPIO_Pins);

//上面的函数是(S3C2440_gpio.h)根据STM32里的函数库模仿的

2、下面是s3c2440_gpio.c

#include "s3c2440_gpio.h"


void GPIO_Init(volatile unsigned int GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)
{

	unsigned int  currentpin = 0x00, pinpos = 0x00, pos = 0x00;
	unsigned int GPIOx_Pu;
	if(((unsigned int )GPIO_InitStruct->GPIO_Pin & (unsigned int )0xFFFF) != 0X00)
	{
		for(pinpos = 0; pinpos < 16; pinpos++)
		{
			pos = ((unsigned int)0x01) << pinpos;
			currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
			if(currentpin == pos)
			{
				__REG(GPIOx) &= ~(3 << (pinpos << 1));
				__REG(GPIOx) |= ((GPIO_InitStruct->GPIO_Mode) << (pinpos << 1));
				GPIOx_Pu  = GPIOx + 8;
				__REG(GPIOx_Pu) = (GPIO_InitStruct->GPIO_Pu) << pinpos;
			}
		}
		

	}
}

void GPIO_SetBits(volatile unsigned int GPIOx,unsigned int GPIO_Pin)
{
	unsigned int GPIOx_DAT = GPIOx + 4;
	__REG(GPIOx_DAT) = ~GPIO_Pin;
}

void GPIO_ResetBits(volatile unsigned int GPIOx,unsigned int GPIO_Pin)
{
	unsigned int GPIOx_DAT = GPIOx + 4;
	__REG(GPIOx_DAT) = GPIO_Pin;
}	

void GPIO_Write(volatile unsigned int GPIOx,unsigned int GPIO_Pins)
{
	unsigned int GPIOx_DAT = GPIOx + 4;
	__REG(GPIOx_DAT) = ~GPIO_Pins;
}

上面实现STM32库里的部分函数。以成功

有错,请指出一下(笑)

(由于上传资源不能修改积分,只能用百度网盘了)全部代码

链接:https://pan.baidu.com/s/1Em7lxxnPIUq1kI-uRJp_LQ
提取码:g3iq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值