feat: interrupt request
This commit is contained in:
parent
0b75add2d1
commit
3e1079ec1b
@ -12,7 +12,6 @@
|
|||||||
#define CPU_INT_FAST_CLK_HZ 4000000u // Value of the fast internal oscillator clock frequency in Hz
|
#define CPU_INT_FAST_CLK_HZ 4000000u // Value of the fast internal oscillator clock frequency in Hz
|
||||||
|
|
||||||
#define UART_MSG UART1
|
#define UART_MSG UART1
|
||||||
#define UART_WIFI UART2
|
|
||||||
|
|
||||||
#define PI 3.1415926
|
#define PI 3.1415926
|
||||||
#define BIT(x) (1UL << (x))
|
#define BIT(x) (1UL << (x))
|
||||||
|
@ -38,8 +38,11 @@ static inline void uart_init(UART_Type *UART, unsigned long baud) {
|
|||||||
UART->BDL = sbr & UART_BDL_SBR_MASK;
|
UART->BDL = sbr & UART_BDL_SBR_MASK;
|
||||||
// Enable receiver and transmitter
|
// Enable receiver and transmitter
|
||||||
UART->C2 |= UART_C2_TE_MASK // Transmitter enable
|
UART->C2 |= UART_C2_TE_MASK // Transmitter enable
|
||||||
| UART_C2_RE_MASK // Receiver enable
|
| UART_C2_RE_MASK; // Receiver enable
|
||||||
| UART_C2_RIE_MASK; // Receiver interrupt enable
|
}
|
||||||
|
|
||||||
|
static inline void uart_rie_enable(UART_Type *UART) {
|
||||||
|
UART->C2 |= UART_C2_RIE_MASK; // Receiver interrupt enable
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int uart_read_ready(UART_Type *UART) {
|
static inline int uart_read_ready(UART_Type *UART) {
|
||||||
|
2
main.c
2
main.c
@ -1,4 +1,3 @@
|
|||||||
#include "ESP8266.h"
|
|
||||||
#include "derivative.h"
|
#include "derivative.h"
|
||||||
#include "systick.h"
|
#include "systick.h"
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
@ -9,6 +8,7 @@ int main(void) {
|
|||||||
// Initialize
|
// Initialize
|
||||||
systick_init(CORCLK / 1000); // Period of systick timer : 1ms
|
systick_init(CORCLK / 1000); // Period of systick timer : 1ms
|
||||||
uart_init(UART_MSG, 9600); // Initialize UART1 with PC
|
uart_init(UART_MSG, 9600); // Initialize UART1 with PC
|
||||||
|
uart_rie_enable(UART_MSG); // Enable UART1 receive interrupt
|
||||||
|
|
||||||
uart_printf(UART_MSG, "System Clock: %lu\r\n", CORCLK);
|
uart_printf(UART_MSG, "System Clock: %lu\r\n", CORCLK);
|
||||||
uart_printf(UART_MSG, "Bus Clock: %lu\r\n", BUSCLK);
|
uart_printf(UART_MSG, "Bus Clock: %lu\r\n", BUSCLK);
|
||||||
|
@ -172,9 +172,6 @@ __attribute__((naked, noreturn)) void _reset(void) {
|
|||||||
|
|
||||||
// Interrupt service routine (ISR)
|
// Interrupt service routine (ISR)
|
||||||
extern void _estack(void); // Defined in link.ld
|
extern void _estack(void); // Defined in link.ld
|
||||||
extern void SysTick_Handler(void); // Defined in main.c
|
|
||||||
|
|
||||||
void Default_Handler() { __asm("bkpt"); }
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Set tab (the vector table) in the section ".vectors"
|
Set tab (the vector table) in the section ".vectors"
|
||||||
@ -183,11 +180,50 @@ void Default_Handler() { __asm("bkpt"); }
|
|||||||
the first one is the initial stack pointer
|
the first one is the initial stack pointer
|
||||||
the second one is the initial program counter
|
the second one is the initial program counter
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void Default_Handler() { __asm("bkpt"); }
|
||||||
|
void NMI_Handler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void HardFault_Handler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void SVC_Handler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void PendSV_Handler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void SysTick_Handler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
|
||||||
|
void DMA0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void DMA1_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void DMA2_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void DMA3_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void MCM_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void FTFL_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void PMC_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void LLWU_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void I2C0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void I2C1_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void SPI0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void SPI1_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void UART0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void UART1_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void UART2_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void ADC0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void CMP0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void TPM0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void TPM1_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void TPM2_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void RTC_Alarm_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void RTC_Seconds_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void PIT_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void USBOTG_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void DAC0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void TSI0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void MCG_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void LPTMR0_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void PORTA_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
void PORTD_IRQHandler() __attribute__((weak, alias("Default_Handler")));
|
||||||
|
|
||||||
__attribute__((section(".vectors"))) void (*tab[16 + 32])(void) = {
|
__attribute__((section(".vectors"))) void (*tab[16 + 32])(void) = {
|
||||||
_estack, // Initial stack pointer
|
_estack, // Initial stack pointer
|
||||||
_reset, // Reset handler
|
_reset, // Reset handler
|
||||||
Default_Handler, // NMI handler
|
NMI_Handler, // NMI handler
|
||||||
Default_Handler, // Hard Fault handler
|
HardFault_Handler, // Hard Fault handler
|
||||||
0, // Reserved
|
0, // Reserved
|
||||||
0, // Reserved
|
0, // Reserved
|
||||||
0, // Reserved
|
0, // Reserved
|
||||||
@ -195,11 +231,43 @@ __attribute__((section(".vectors"))) void (*tab[16 + 32])(void) = {
|
|||||||
0, // Reserved
|
0, // Reserved
|
||||||
0, // Reserved
|
0, // Reserved
|
||||||
0, // Reserved
|
0, // Reserved
|
||||||
Default_Handler, // SVC handler
|
SVC_Handler, // SVC handler
|
||||||
0, // Reserved
|
0, // Reserved
|
||||||
0, // Reserved
|
0, // Reserved
|
||||||
Default_Handler, // PendSV handler
|
PendSV_Handler, // PendSV handler
|
||||||
SysTick_Handler // SysTick handler
|
SysTick_Handler, // SysTick handler
|
||||||
|
DMA0_IRQHandler, // DMA channel 0 transfer complete and error
|
||||||
|
DMA1_IRQHandler, // DMA channel 1 transfer complete and error
|
||||||
|
DMA2_IRQHandler, // DMA channel 2 transfer complete and error
|
||||||
|
DMA3_IRQHandler, // DMA channel 3 transfer complete and error
|
||||||
|
MCM_IRQHandler, // Normal interrupt
|
||||||
|
FTFL_IRQHandler, // command complete and read collision
|
||||||
|
PMC_IRQHandler, // Low-voltage detect, low-voltage warning
|
||||||
|
LLWU_IRQHandler, // Low Leakage Wakeup
|
||||||
|
I2C0_IRQHandler, // I2C0 interrupt
|
||||||
|
I2C1_IRQHandler, // I2C1 interrupt
|
||||||
|
SPI0_IRQHandler, // SPI0 interrupt
|
||||||
|
SPI1_IRQHandler, // SPI1 interrupt
|
||||||
|
UART0_IRQHandler, // UART0 status and error
|
||||||
|
UART1_IRQHandler, // UART1 status and error
|
||||||
|
UART2_IRQHandler, // UART2 status and error
|
||||||
|
ADC0_IRQHandler, // ADC0 interrupt
|
||||||
|
CMP0_IRQHandler, // CMP0 interrupt
|
||||||
|
TPM0_IRQHandler, // TPM0 fault, overflow and channels interrupt
|
||||||
|
TPM1_IRQHandler, // TPM1 fault, overflow and channels interrupt
|
||||||
|
TPM2_IRQHandler, // TPM2 fault, overflow and channels interrupt
|
||||||
|
RTC_Alarm_IRQHandler, // RTC alarm interrupt
|
||||||
|
RTC_Seconds_IRQHandler, // RTC seconds interrupt
|
||||||
|
PIT_IRQHandler, // PIT timer all channels interrupt
|
||||||
|
Default_Handler, // Reserved
|
||||||
|
USBOTG_IRQHandler, // USB OTG interrupt
|
||||||
|
DAC0_IRQHandler, // DAC0 interrupt
|
||||||
|
TSI0_IRQHandler, // TSI0 interrupt
|
||||||
|
MCG_IRQHandler, // MCG interrupt
|
||||||
|
LPTMR0_IRQHandler, // LPTimer interrupt
|
||||||
|
Default_Handler, // Reserved
|
||||||
|
PORTA_IRQHandler, // Port A interrupt
|
||||||
|
PORTD_IRQHandler, // Port D interrupt
|
||||||
};
|
};
|
||||||
|
|
||||||
__attribute__((section(".cfmconfig"))) uint32_t(cfm[4]) = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE};
|
__attribute__((section(".cfmconfig"))) uint32_t(cfm[4]) = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE};
|
||||||
|
Reference in New Issue
Block a user