这是我第一次用Freescale的片子,以前各大公司的芯片也用了不少,但是都是基于官方的固件库的,换到这块板子,有点摸不上头绪了。说说我的经历
第一我先去找了官方的库,发现有KSDK这个库,发现用的人不多,我看了下,貌似资料也不是很多,也就没多看。
第二找了第三方的库现在比较,各家有各家的特点肯些做的确实不错。
官方的KSDK我是想建一个不用KSDK的代码,一个干干净净的工程的,但是出了各种各种各种的问题,最后也没有解决,汇编上的问题,我看不懂,我试了各种编译器,GCC ,IAR,MDK,都没有成功,最后的那个工程是用KDS建了一个可以用的工程,然后用光盘中的汇编文件替换了原来的汇编文件,终于不报错程序也运行正常了,我是一个爱折腾的人~~
-----------------------------------------------------------------------------------------------------------------------------------------------
然后我又开始折腾库了,各家的库都有各家的特点,找不找去,也没发现一个比较合我的库,各人感觉不一样,我是一个比较无聊的人,我这么感觉,之后开始自己写了,国庆什么的,到今天才真正的算是点亮了一个灯而已,各种模仿加抄袭,自己看了一下手册写了几个函数,毕竟板子在手上不能对社区没有一个交待,这么信任一个新手
- #include "MKL26Z4.h"
- #include "stdlib.h"
- #define PORT_SHIFT 12
- typedef enum {
- PTA0 = 0x0,
- PTA1 = 0x4,
- PTA2 = 0x8,
- PTA3 = 0xc,
- PTA4 = 0x10,
- PTA5 = 0x14,
- PTA6 = 0x18,
- PTA7 = 0x1c,
- PTA8 = 0x20,
- PTA9 = 0x24,
- PTA10 = 0x28,
- PTA11 = 0x2c,
- PTA12 = 0x30,
- PTA13 = 0x34,
- PTA14 = 0x38,
- PTA15 = 0x3c,
- PTA16 = 0x40,
- PTA17 = 0x44,
- PTA18 = 0x48,
- PTA19 = 0x4c,
- PTA20 = 0x50,
- PTA21 = 0x54,
- PTA22 = 0x58,
- PTA23 = 0x5c,
- PTA24 = 0x60,
- PTA25 = 0x64,
- PTA26 = 0x68,
- PTA27 = 0x6c,
- PTA28 = 0x70,
- PTA29 = 0x74,
- PTA30 = 0x78,
- PTA31 = 0x7c,
- PTB0 = 0x1000,
- PTB1 = 0x1004,
- PTB2 = 0x1008,
- PTB3 = 0x100c,
- PTB4 = 0x1010,
- PTB5 = 0x1014,
- PTB6 = 0x1018,
- PTB7 = 0x101c,
- PTB8 = 0x1020,
- PTB9 = 0x1024,
- PTB10 = 0x1028,
- PTB11 = 0x102c,
- PTB12 = 0x1030,
- PTB13 = 0x1034,
- PTB14 = 0x1038,
- PTB15 = 0x103c,
- PTB16 = 0x1040,
- PTB17 = 0x1044,
- PTB18 = 0x1048,
- PTB19 = 0x104c,
- PTB20 = 0x1050,
- PTB21 = 0x1054,
- PTB22 = 0x1058,
- PTB23 = 0x105c,
- PTB24 = 0x1060,
- PTB25 = 0x1064,
- PTB26 = 0x1068,
- PTB27 = 0x106c,
- PTB28 = 0x1070,
- PTB29 = 0x1074,
- PTB30 = 0x1078,
- PTB31 = 0x107c,
- PTC0 = 0x2000,
- PTC1 = 0x2004,
- PTC2 = 0x2008,
- PTC3 = 0x200c,
- PTC4 = 0x2010,
- PTC5 = 0x2014,
- PTC6 = 0x2018,
- PTC7 = 0x201c,
- PTC8 = 0x2020,
- PTC9 = 0x2024,
- PTC10 = 0x2028,
- PTC11 = 0x202c,
- PTC12 = 0x2030,
- PTC13 = 0x2034,
- PTC14 = 0x2038,
- PTC15 = 0x203c,
- PTC16 = 0x2040,
- PTC17 = 0x2044,
- PTC18 = 0x2048,
- PTC19 = 0x204c,
- PTC20 = 0x2050,
- PTC21 = 0x2054,
- PTC22 = 0x2058,
- PTC23 = 0x205c,
- PTC24 = 0x2060,
- PTC25 = 0x2064,
- PTC26 = 0x2068,
- PTC27 = 0x206c,
- PTC28 = 0x2070,
- PTC29 = 0x2074,
- PTC30 = 0x2078,
- PTC31 = 0x207c,
- PTD0 = 0x3000,
- PTD1 = 0x3004,
- PTD2 = 0x3008,
- PTD3 = 0x300c,
- PTD4 = 0x3010,
- PTD5 = 0x3014,
- PTD6 = 0x3018,
- PTD7 = 0x301c,
- PTD8 = 0x3020,
- PTD9 = 0x3024,
- PTD10 = 0x3028,
- PTD11 = 0x302c,
- PTD12 = 0x3030,
- PTD13 = 0x3034,
- PTD14 = 0x3038,
- PTD15 = 0x303c,
- PTD16 = 0x3040,
- PTD17 = 0x3044,
- PTD18 = 0x3048,
- PTD19 = 0x304c,
- PTD20 = 0x3050,
- PTD21 = 0x3054,
- PTD22 = 0x3058,
- PTD23 = 0x305c,
- PTD24 = 0x3060,
- PTD25 = 0x3064,
- PTD26 = 0x3068,
- PTD27 = 0x306c,
- PTD28 = 0x3070,
- PTD29 = 0x3074,
- PTD30 = 0x3078,
- PTD31 = 0x307c,
- PTE0 = 0x4000,
- PTE1 = 0x4004,
- PTE2 = 0x4008,
- PTE3 = 0x400c,
- PTE4 = 0x4010,
- PTE5 = 0x4014,
- PTE6 = 0x4018,
- PTE7 = 0x401c,
- PTE8 = 0x4020,
- PTE9 = 0x4024,
- PTE10 = 0x4028,
- PTE11 = 0x402c,
- PTE12 = 0x4030,
- PTE13 = 0x4034,
- PTE14 = 0x4038,
- PTE15 = 0x403c,
- PTE16 = 0x4040,
- PTE17 = 0x4044,
- PTE18 = 0x4048,
- PTE19 = 0x404c,
- PTE20 = 0x4050,
- PTE21 = 0x4054,
- PTE22 = 0x4058,
- PTE23 = 0x405c,
- PTE24 = 0x4060,
- PTE25 = 0x4064,
- PTE26 = 0x4068,
- PTE27 = 0x406c,
- PTE28 = 0x4070,
- PTE29 = 0x4074,
- PTE30 = 0x4078,
- PTE31 = 0x407c,
- NC = (int)0xFFFFFFFF,
- }PinName;
- typedef struct {
- PinName pin;
- uint32_t mask;
- __IO uint32_t *reg_dir;
- __IO uint32_t *reg_set; //psor
- __IO uint32_t *reg_clr;
- __I uint32_t *reg_in;
- } gpio_t;
- typedef enum {
- PullNone = 0,
- PullUp = 2,
- PullDefault = PullUp
- } PinMode;
- typedef enum {
- PIN_INPUT,
- PIN_OUTPUT
- } PinDirection;
- void myDelay (uint32_t ulTime)
- {
- uint32_t i;
- i = 0;
- while (ulTime--) {
- for (i = 0; i < 5000; i++);
- }
- }
- void Pin_Mode_Set(PinName pin, PinMode mode)
- {
- __IO uint32_t* pin_pcr = (__IO uint32_t*)(PORTA_BASE + pin);
- *pin_pcr = (*pin_pcr & ~0x3) | mode;
- }
- void pin_function(PinName pin, int function, PinDirection dir)
- {
- __IO uint32_t* pin_pcr = 0;
-
- uint32_t current_port = (uint32_t)pin >> PORT_SHIFT;
- uint32_t current_pin = (uint32_t)(pin & 0x7c) >> 2;
- FGPIO_Type *reg = (FGPIO_Type *)(FPTA_BASE + current_port * 0x40);
- SIM->SCGC5 |= 1 << (SIM_SCGC5_PORTA_SHIFT + current_port);
- pin_pcr = &((PORT_Type *)(PORTA_BASE + 0x1000 * current_port))->PCR[current_pin];
- *pin_pcr = (*pin_pcr & ~0x700) | (function << 8);
- switch(dir)
- {
- case PIN_INPUT:
- reg->PDDR &= ~(1 << current_pin);
- break;
- case PIN_OUTPUT:
- reg->PDDR |= 1 << current_pin;
- break;
- }
- }
- void Pin_Set(PinName pin)
- {
- uint32_t current_port = (uint32_t)pin >> PORT_SHIFT;
- uint32_t current_pin = (uint32_t)(pin & 0x7c) >> 2;
- FGPIO_Type *reg = (FGPIO_Type *)(FPTA_BASE + current_port *0x40);
- reg->PSOR |= (1 << current_pin);
- }
- void Pin_clr(PinName pin)
- {
- uint32_t current_port = (uint32_t)pin >> PORT_SHIFT;
- uint32_t current_pin = (uint32_t)(pin & 0x7c) >> 2;
- FGPIO_Type *reg = (FGPIO_Type *)(FPTA_BASE + current_port *0x40);
- reg->PCOR |= (1 << current_pin);
- }
- int main(void)
- {
- pin_function(PTB18, 1,PIN_OUTPUT);
- Pin_Mode_Set(PTB18,PullUp);
- // GPIO_Init();
- while(1)
- {
- Pin_Set(PTB18);
- myDelay(500);
- Pin_clr(PTB18);
- myDelay(500);
-
- }
- }
复制代码代码有部分是参考其他的,不知道,目前只是做的很简单,以前想全部封装起来,不过这是个庞大的工程。。应该
|