学完(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