以前没有使用过fsl的芯片,记录开始
1. iar的icf文件,在ram中调试的
知道icf的7条语法
(1)定义标记符号 define symbol __ICFEDIT_region_ROM_start__ = 0x0;
(2)定义存储器大小 define memory mem with size = 4G;
(3)定义rom,ram区 define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__] | mem:[from (__region_RAM2_start__) to __region_RAM2_end__];
2.iar工程结构图
io.c 是对串口驱动的封装,主要是in_char (void){}; out_char (char ch){}; char_present (void){}三个函数,
printf.c 实现
int
printf (const char *fmt, ...)
{}
int
sprintf (char *s, const char *fmt, ...)
{}
两个函数,iar的k70工程里面没有使用syscall,代码的方式实现了printf
startup.c 实现
void
common_startup(void)
{}
一个函数,这个函数是完成ram的初始化的.
3.k70的中断的设置
(1)中断初始化
void Pit_init(void)
{
printf("%d\n", fvdi_bv);
SIM_SCGC6 |= SIM_SCGC6_PIT_MASK;//enable the clock of PIT module
//PIT_TFLG_REG(PIT_BASE_PTR,0) |= PIT_TFLG_TIF_MASK; //clear flag
PIT_MCR = 0x00;
//PIT_MCR_REG(PIT_BASE_PTR) &= ~PIT_MCR_MDIS_MASK;//enable PIT module
PIT_LDVAL0 = 14400000;
//PIT_LDVAL_REG(PIT_BASE_PTR,0) = 14400000;//setup timer 0 for 256000 cycles
PIT_TCTRL_REG(PIT_BASE_PTR,0) |= PIT_TCTRL_TEN_MASK;
// PIT_TCTRL_REG(PIT_BASE_PTR,0) &= ~PIT_TCTRL_TIE_MASK;
PIT_TCTRL_REG(PIT_BASE_PTR,0) |= PIT_TCTRL_TIE_MASK;
enable_irq(84-16); //GPIOE Vector is 107. IRQ# is 107-16=91
}
(2)在isr.h中重新定义中断向量
#undef VECTOR_106
#define VECTOR_106 portd_isr
#undef VECTOR_107
#define VECTOR_107 porte_isr
#undef VECTOR_084
#define VECTOR_084 pit0_isr
// ISR(s) are defined in your project directory.
extern void portd_isr(void);
extern void porte_isr(void);
extern void pit0_isr(void);
(3)写中断服务函数
void pit0_isr(void)
{
unsigned int c;
//turn off timer
PIT_TCTRL_REG(PIT_BASE_PTR,0)&=~(PIT_TCTRL_TIE_MASK|PIT_TCTRL_TEN_MASK);
//PIT_TFLG0 = PIT_TFLG_TIF_MASK;
PIT_TFLG_REG(PIT_BASE_PTR,0) |= PIT_TFLG_TIF_MASK;
GPIOD_PTOR |= GPIO_PTOR_PTTO(GPIO_PIN(0)|GPIO_PIN(1));
c = PIT_CVAL0;
//turn on timer
PIT_TCTRL_REG(PIT_BASE_PTR,0)|=(PIT_TCTRL_TIE_MASK|PIT_TCTRL_TEN_MASK);
}
就可以了.