aaarrr, оптимизировать то нечего все очень просто. МК использую для управления двигателем. Перед тем как написать полностью проект отлаживаю его составные части. Вот дошел до датчика скорости. На один оборот датчика скорости приходит 250 импульсов.
Написал программу
CODE
#include <lpc214x.h>
int i;
void T1isr(void) __irq;
void _PLL (void);
void _MAM (void);
int main(void)
{
int j;
i=0;
_PLL();
_MAM();
PINSEL1 =0x00000C00; //p0.21 vibran kak zahvat//
T1PR = 0x00000001; //Load prescaler for 1 Msec tick
T1TCR = 0x00000002; //Reset counter and prescaler
T1CCR = 0x00000A00; //Capture on rising edge of channe0.0
T1TCR = 0x00000001; //enable timer
VICVectAddr5 = (unsigned)T1isr; //Set the timer ISR vector address
VICVectCntl5 = 0x00000025; //Set channel
VICIntEnable = 0x00000020; //Enable the interrupt
IODIR0 =0x00000C00; //set p.10 and p.11 outputs
IO0SET =0x0C00;
j=0;
while(1)
{
if (i==250)
{
IO0CLR = 0x0400;
}
VICIntEnable = 0x00000020; //Enable the interrupt
for (j = 0; j < 500000; j++ ); // wait 500 msec
IO0CLR =0x0800;
for (j = 0; j < 500000; j++ ); // wait 500 msec
IO0SET =0x0800;
}
}
void _PLL (void)
{
PLL0CFG = 0x00000024; // ystanavliv koef ymnojenia i delenia for poluchenia chastoti 60MHz
PLL0CON = 0x00000001; // vkluchaem PLL
PLL0FEED = 0x000000AA; // obnovliaem registri
PLL0FEED = 0x00000055;
while (!(PLL0STAT& 0x00000400));// proveraiem flag lock
PLL0CON = 0x00000003; // podkluchaem PLL
PLL0FEED = 0x000000AA; // obnovliaem registri Pll
PLL0FEED = 0x00000055;
VPBDIV = 0x00000002; // Yctanablivaem chastotu chini VPB=30MHz
}
void _MAM (void)
{
MAMCR = 0x00000000;
MAMTIM = 0x00000004;
MAMCR = 0x00000002;
}
void T1isr (void) __irq
{
VICIntEnClr = 0x00000020;
i++;
T1IR = 0x00000080;
VICVectAddr = 0x00000024; //Dummy write to signal end of interrupt
}
Импульсы от датчика скорости подаю на ногу МК (p0.21) программирую её как capture 1.3 ()для TIMER1. Настраиваю TIMER1 таким образом чтобы при переходе c 0 на 1, МК входила в прерывание. В приревании инкременирую i(счетчик импульсов). в основном теле программы провиряю этот счетчик если он равен 250 то я включаю светодиод. На отладочной плате их у меня два. Один светодиод просто мигает, а второй показывает когда счетчик импульсов i насчитал 250 импульсов. Всё просто!!!!!
Заливаю программу в МК. Датчик делает кучу оборотов, только после этого загорается светодиод. Т.е. обработка тормозит. Импульсы МК пропускает! Думаю что программа написанная на С, тормозит МК. Какие пути оптимизации? Пожалуйста предложите, буду очень рад услышать конструктивную критику и не только!!!