|
硬件调好之后,俺就开始准备把UCOS移上来,由于以前在LPC2132上移植过,所以要做工作量不是很大,主要是重新配置下系统的资源如: PLL,MAM,VIC中断系统,和Timer,并重写中断处理函数。 PLL的配置,我采用了逐一试探的方法,先确定晶体的分频值N,然后根据输入的系统运行频率求出PLL的倍频值M,并使PLL Synthesizer 输出的频率介于 275—550MHz之间。程序如下:
INT8U Config_Clock(CLKSEL clksrc, INT32U fosc, INT32U clk)
{
INT16U i;
INT32U clkdiv;
if(clk>F72MHZ || fosc>F50MHZ)
return 0;
//STEP 1
PLLCON_bit.PLLC = 0;
PLLFEED = 0xAA;
PLLFEED = 0x55;
SCS |= 0x20;
//while( !(SCS & 0x40) );
//STEP 2
PLLCON_bit.PLLE = 0;
PLLFEED = 0xAA;
PLLFEED = 0x55;
//STEP 3
switch (clksrc)
{
case RC:
CLKSRCSEL_bit.CLKSRC = RC;
break;
case OSC:
CLKSRCSEL_bit.CLKSRC = OSC;
break;
case RTC:
CLKSRCSEL_bit.CLKSRC = RTC;
break;
default: return 0;
}
//STEP 5, assume N="1"
for(i=6;iF20MHZ && clk MAMTIM_bit.CYCLES = 2;
else if(clk>F40MHZ)
MAMTIM_bit.CYCLES = 3;
//MAM REG must be disable first
MAMCR_bit.MODECTRL= 2;
}
最关键的部分还是中断处理程序,这部分由于LPC2368的VIC和2132的差别还蛮大的,所以要重写了,2368没有非向量中断这一说,只有IRQ,和FIQ。2132里设置IRQ的优先级是把中断向量等级SLOT赋给VICVECTCtrl0—15的低5位,SLOT为0,优先级最高。2368是把SLOT赋给32个PRIOTY积存器,每个PORITY积存器代表对应的中断源的中断向量通道,同样SLOT为0是最高优先级。
配置程序如下:
void VIC_Config(INT8U Mode, INT32U IntNum, INT8U slot, INT32U ISRAddr)
{
INT32U * pADR;
if(Mode==2)
VICINTSELECT |= 1 |
|