So far, I have examined Interrupt controller register and designed "Interrupt.c" performing to enable, disable Interrupt, and define handlers.
Eventhough I made Interrupt method, I can't utilize Interrupt without any hardware.
In CH6-3, I will set UART interrupt and define UART interrupt handlers.
void Hal_uart_init(void){
Uart->uartcr.bits.UARTEN=0;
Uart->uartcr.bits.TXE=1;
Uart->uartcr.bits.RXE=1;
Uart->uartcr.bits.UARTEN=1;
Uart->uartimsc.bits.RXIM = 1;
// enable input interrupt
Hal_interrupt_enable(UART_INTERRUPT0);
Hal_interrupt_register_handler(interrupt_handler, UART_INTERRUPT0);
}
static void interrupt_handler(void){
uint8_t ch = Hal_uart_get_char();
Hal_uart_put_char(ch);
}
#include "ARMv7AR.h"
#include "MemoryMap.h"
.text
.code 32
.global vector_start
.global vector_end
vector_start:
LDR PC, reset_handler_addr
LDR PC, undef_handler_addr
LDR PC, svc_handler_addr
LDR PC, pftch_abt_handler_addr
LDR PC, data_abt_handler_addr
B .
LDR PC, irq_handler_addr
LDR PC, fiq_handler_addr
reset_handler_addr: .word reset_handler
undef_handler_addr: .word dummy_handler
svc_handler_addr: .word dummy_handler
pftch_abt_handler_addr: .word dummy_handler
data_abt_handler_addr: .word dummy_handler
// 여기를 바꿨다.
irq_handler_addr: .word Irq_Handler
fiq_handler_addr: .word Fiq_Handler
#include "stdbool.h"
#include "stdint.h"
#include "HalInterrupt.h"
__attribute__ ((interrupt("IRQ"))) void Irq_Handler(void){
Hal_interrupt_run_handler();
}
I' done now...
Keyboard input and display works well.