У меня следующая проблема: прерывание от таймера срабатывает только один раз (в железе; в симуляторе всё работает как надо). Причём видно, что прерывание происходит ( в VICRawIntr соотв. бит появляется ), но в саму функцию обработки прерывания не заходит.
Проект в приложении к сообщению. Нажмите для просмотра прикрепленного файла
Использую отладочную плату SK-LPC2478-S3E ( http://starterkit.ru/html/index.php?name=s...=view&id=10 ) и отладчик JetLink8.
IDE - Keil 4:
IDE-Version:
µVision V4.21.0.0
Tool Version Numbers:
Toolchain: MDK-ARM Standard Version: 4.21
Toolchain Path: BIN40\
C Compiler: Armcc.Exe V4.1.0.713
Assembler: Armasm.Exe V4.1.0.713
Linker/Locator: ArmLink.Exe V4.1.0.713
Librarian: ArmAr.Exe V4.1.0.713
Hex Converter: FromElf.Exe V4.1.0.713
CPU DLL: SARM.DLL V4.21
Dialog DLL: DARMP.DLL V1.51
Target DLL: Segger\JLTAgdi.dll V1.48
Dialog DLL: TARMP.DLL V1.51
CODE
#include <LPC24xx.H>
#include "lpc2478.h"
void uart0_init(void);
void timer0_init(void);
void timer0_int(void) __irq;
int main(void)
{
uart0_init();
timer0_init();
// work cycle
while(1)
{
}
}
void timer0_init(void)
{
T0TCR = 0;
T0PR = 0xB3*100;
T0MR0 = 19*50;
T0MCR = 0x3;
VICIntEnable |= _BV(TIMER0_INT);
VICVectAddr4 = (unsigned long)timer0_int;
T0TCR = 1;
}
void timer0_int(void) __irq
{
T0IR = 1;
U0THR = 'T';
}
void uart0_init(void)
{
//9600, stop bits - 2, parity - odd, 8 bits
U0IER = 0x03;
U0LCR = 0x0F;
U0FCR = 0x81; // Enable FIFO, RX Trig Lvl 8 chars
SBI(U0LCR, DLAB);
U0DLM = 0;
U0DLL = 78;
U0FDR = ( 0xF0 & (2 << MULVAL)) | ( 0xF &(1 << DIVADDVAL));
CBI(U0LCR, DLAB);
PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | (1 << 4) | (1 << 6);
}
#include "lpc2478.h"
void uart0_init(void);
void timer0_init(void);
void timer0_int(void) __irq;
int main(void)
{
uart0_init();
timer0_init();
// work cycle
while(1)
{
}
}
void timer0_init(void)
{
T0TCR = 0;
T0PR = 0xB3*100;
T0MR0 = 19*50;
T0MCR = 0x3;
VICIntEnable |= _BV(TIMER0_INT);
VICVectAddr4 = (unsigned long)timer0_int;
T0TCR = 1;
}
void timer0_int(void) __irq
{
T0IR = 1;
U0THR = 'T';
}
void uart0_init(void)
{
//9600, stop bits - 2, parity - odd, 8 bits
U0IER = 0x03;
U0LCR = 0x0F;
U0FCR = 0x81; // Enable FIFO, RX Trig Lvl 8 chars
SBI(U0LCR, DLAB);
U0DLM = 0;
U0DLL = 78;
U0FDR = ( 0xF0 & (2 << MULVAL)) | ( 0xF &(1 << DIVADDVAL));
CBI(U0LCR, DLAB);
PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | (1 << 4) | (1 << 6);
}
Всем заранее спасибо!!!