Контроллер: LPC1768
Пишу инициализацию и обработчик прерываний для UART3
Код
void init_uart3(void)
{
// Скорость
/*
F = Fp/(16*(DLM*256+DLL)*(1+DIV/MUL))
F = 250 kBod
Fp = 25 MHz
DLM = 0
DLL = 5
DIV = 1
MUL = 4
*/
U3LCR_bit.DLAB = 1;
U3DLL = 5;
U3DLM = 0;
U3LCR_bit.DLAB = 0;
U3FDR_bit.DIVADDVAL = 1;
U3FDR_bit.MULVAL = 4;
// Формат
U3FCR_bit.FCRFE = 1; // Включаем FIFO
U3FCR_bit.RTLS = 2; // Порог срабатывания 8 символов
U3LCR_bit.WLS = 3; // 8 бит данных
U3LCR_bit.SBS = 1; // 2 стоп бита
// Прерывания
U3IER_bit.RDAIE = 1; // Прерывание по вх. данным
U3IER_bit.RXLSIE = 1; // Прерывание по статусу линии
SETENA0 = (1UL << 8); // Разрешаем NVIC UART3
}
{
// Скорость
/*
F = Fp/(16*(DLM*256+DLL)*(1+DIV/MUL))
F = 250 kBod
Fp = 25 MHz
DLM = 0
DLL = 5
DIV = 1
MUL = 4
*/
U3LCR_bit.DLAB = 1;
U3DLL = 5;
U3DLM = 0;
U3LCR_bit.DLAB = 0;
U3FDR_bit.DIVADDVAL = 1;
U3FDR_bit.MULVAL = 4;
// Формат
U3FCR_bit.FCRFE = 1; // Включаем FIFO
U3FCR_bit.RTLS = 2; // Порог срабатывания 8 символов
U3LCR_bit.WLS = 3; // 8 бит данных
U3LCR_bit.SBS = 1; // 2 стоп бита
// Прерывания
U3IER_bit.RDAIE = 1; // Прерывание по вх. данным
U3IER_bit.RXLSIE = 1; // Прерывание по статусу линии
SETENA0 = (1UL << 8); // Разрешаем NVIC UART3
}
...и тут оп! J-link переходит из пошагового в режим выполнения,
нажимаю Break, и вижу, что он уже в
Код
void UART3_IRQHandler(void)
{
U3RBR;
CLRPEND0 = 1UL << 8; // Сбрасываем флаг прерывания NVIC UART0
}
{
U3RBR;
CLRPEND0 = 1UL << 8; // Сбрасываем флаг прерывания NVIC UART0
}
F11, F11 .. и опять из пошагового вылетает! Делаю Break,
он или там же, или тут
Код
while(1)
{
__disable_interrupt();
WDFEED = 0xAA; // Кормим
WDFEED = 0x55; // собаку
__enable_interrupt();
}
{
__disable_interrupt();
WDFEED = 0xAA; // Кормим
WDFEED = 0x55; // собаку
__enable_interrupt();
}
Причем, по UART3 в этот момент ничего не идет.
И что это вообще за ерунда с отладкой???