Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * startup.c
- *
- */
- #define PORT_BARGRAPH_BASE 0x40020C00 /* MD407 port D */
- #define portBargraphOdrLow ((volatile unsigned char *) (PORT_BARGRAPH_BASE+0x14))
- #define RCC_APB2ENR 0x40023844
- #define SYSCFG_BASE 0x40013800
- #define SYSCFG_EXTICR1 0x40013808
- #define RCC_APB2ENR 0x40023844
- #define EXTI_BASE 0x40013C00
- #define EXTI_IMR 0x40013C00
- //#define EXTI_EMR 0x40013C04
- #define EXTI_FTSR 0x40013C0C
- #define EXTI_RTSR 0x40013C08
- #define EXTI_PR 0x40013C14
- //#define NVIC_BASE 0xE000E010
- #define EXTI3_IRQVEC 0x2001C064
- #define EXTI2_IRQVEC 0x2001C060
- #define EXTI1_IRQVEC 0x2001C05C
- #define EXTI0_IRQVEC 0x2001C058
- #define NVIC_ISER0 0xE000E100
- //#define NVIC_ICER0 0xE000E180
- //#define NVIC_ISPR0 0xE000E200
- #define NVIC_ICPR0 0xE000E280
- //#define NVIC_IABR0 0xE000E300
- #define NVIC_IPR0 0xE000E400
- #define NVIC_EXTI3_IRQ_BPOS (1<<9)
- #define NVIC_EXTI2_IRQ_BPOS (1<<8)
- #define NVIC_EXTI1_IRQ_BPOS (1<<7)
- #define NVIC_EXTI0_IRQ_BPOS (1<<6)
- #define EXTI3_IRQ_BPOS0 1
- #define EXTI3_IRQ_BPOS1 (1<<1)
- #define EXTI3_IRQ_BPOS2 (1<<2)
- #define EXTI3_IRQ_BPOS (1<<3)
- #define EXTI3_IRQ_BPOSRES0 (1<<4)
- #define EXTI3_IRQ_BPOSRES1 (1<<5)
- #define EXTI3_IRQ_BPOSRES2 (1<<6)
- #define EXTI2_IRQ_BPOS0 1
- #define EXTI2_IRQ_BPOS1 (1<<1)
- #define EXTI2_IRQ_BPOS2 (1<<2)
- #define EXTI2_IRQ_BPOS (1<<3)
- #define EXTI2_IRQ_BPOSRES0 (1<<4)
- #define EXTI2_IRQ_BPOSRES1 (1<<5)
- #define EXTI2_IRQ_BPOSRES2 (1<<6)
- #define EXTI1_IRQ_BPOS0 1
- #define EXTI1_IRQ_BPOS1 (1<<1)
- #define EXTI1_IRQ_BPOS2 (1<<2)
- #define EXTI1_IRQ_BPOS (1<<3)
- #define EXTI1_IRQ_BPOSRES0 (1<<4)
- #define EXTI1_IRQ_BPOSRES1 (1<<5)
- #define EXTI1_IRQ_BPOSRES2 (1<<6)
- #define EXTI0_IRQ_BPOS0 1
- #define EXTI0_IRQ_BPOS1 (1<<1)
- #define EXTI0_IRQ_BPOS2 (1<<2)
- #define EXTI0_IRQ_BPOS (1<<3)
- #define EXTI0_IRQ_BPOSRES0 (1<<4)
- #define EXTI0_IRQ_BPOSRES1 (1<<5)
- #define EXTI0_IRQ_BPOSRES2 (1<<6)
- #define GPIO_E 0x40021000
- #define GPIOE_MODER ((volatile unsigned int *) (GPIO_E))
- #define GPIOE_IDR_LOW ((volatile unsigned char *) (GPIO_E+0x10))
- #define GPIOE_ODR_LOW ((volatile unsigned char *) (GPIO_E+0x14))
- char count, lit;
- void startup(void) __attribute__((naked)) __attribute__((section (".start_section")) );
- void startup ( void ){
- __asm volatile(
- " LDR R0,=0x2001C000\n" /* set stack */
- " MOV SP,R0\n"
- " BL main\n" /* call main */
- "_exit: B .\n" /* never return */
- ) ;
- }
- /*void irq_handler(void) {
- if (*((unsigned int *) EXTI_PR) & EXTI1_IRQ_BPOS) {
- if (*GPIOE_IDR_LOW & EXTI1_IRQ_BPOS0) {
- *GPIOE_ODR_LOW |= EXTI1_IRQ_BPOSRES0;
- *GPIOE_ODR_LOW &= 0xEF;
- count++;
- }
- if (*GPIOE_IDR_LOW & EXTI2_IRQ_BPOS1) {
- *GPIOE_ODR_LOW |= EXTI2_IRQ_BPOSRES1;
- *GPIOE_ODR_LOW &= 0xDF;
- count = 0;
- }
- if (*GPIOE_IDR_LOW & EXTI3_IRQ_BPOS2) {
- *GPIOE_ODR_LOW |= EXTI3_IRQ_BPOSRES2;
- *GPIOE_ODR_LOW &= 0xBF;
- if (lit) {
- lit = 0;
- }
- else {
- lit = 1;
- }
- }
- *((unsigned int *) EXTI_PR) |= EXTI1_IRQ_BPOS;
- *((unsigned int *) EXTI_PR) |= EXTI2_IRQ_BPOS;
- *((unsigned int *) EXTI_PR) |= EXTI3_IRQ_BPOS;
- }
- }
- */
- void irq_handler_0(void) {
- //if (*((unsigned int *) EXTI_PR) & EXTI0_IRQ_BPOS) {
- count++;
- if (*GPIOE_IDR_LOW & EXTI0_IRQ_BPOS0) {
- *GPIOE_ODR_LOW |= EXTI0_IRQ_BPOSRES0;
- *GPIOE_ODR_LOW &= 0xEF;
- count++;
- }
- *((unsigned int *) EXTI_PR) |= EXTI0_IRQ_BPOS;
- //}
- }
- void irq_handler_1(void) {
- if (*GPIOE_IDR_LOW & EXTI1_IRQ_BPOS1) {
- *GPIOE_ODR_LOW |= EXTI1_IRQ_BPOSRES1;
- *GPIOE_ODR_LOW &= 0xDF;
- count = 0;
- }
- *((unsigned int *) EXTI_PR) |= EXTI1_IRQ_BPOS;
- }
- void irq_handler_2(void) {
- if (*GPIOE_IDR_LOW & EXTI2_IRQ_BPOS2) {
- *GPIOE_ODR_LOW |= EXTI2_IRQ_BPOSRES2;
- *GPIOE_ODR_LOW &= 0xBF;
- if (*portBargraphOdrLow) {
- count = 0;
- }
- else {
- count = 0xFF;
- }
- }
- *((unsigned int *) EXTI_PR) |= EXTI2_IRQ_BPOS;
- }
- void appInit(void) {
- #ifdef USBDM
- *((unsigned long *) 0x40023830) = 0x18;
- *((unsigned long *) 0x40023844) |= 0x4000;
- *((unsigned long *) 0xE000ED08) = 0x2001C000;
- #endif
- *((unsigned long *) 0x40020C00) = 0x00005555; //MODER D
- *GPIOE_MODER = 0x00005500;
- //lit = 1;
- count = 0;
- //Set PE3 as IRQ port, negativ flanktrig
- *((unsigned int *) RCC_APB2ENR) |= 0x4000; //Enable SYSCFG clock
- *((unsigned int *) SYSCFG_EXTICR1) |= 0x0444; //PE3 -> All but EXTI3
- //Config mask bit to the interrupt line (EXTI_IMR)
- //*((unsigned int *) EXTI_IMR) |= EXTI3_IRQ_BPOS;
- *((unsigned int *) EXTI_IMR) |= EXTI2_IRQ_BPOS2;
- *((unsigned int *) EXTI_IMR) |= EXTI1_IRQ_BPOS1;
- *((unsigned int *) EXTI_IMR) |= EXTI0_IRQ_BPOS0;
- //Config trigger bit selection of the interrupt line
- *((unsigned int *) EXTI_FTSR) &= ~(EXTI2_IRQ_BPOS2 |EXTI1_IRQ_BPOS1 |EXTI0_IRQ_BPOS0);
- *((unsigned int *) EXTI_RTSR) |= (EXTI2_IRQ_BPOS2 |EXTI1_IRQ_BPOS1 |EXTI0_IRQ_BPOS0);
- //Set interrupt vector
- //*((void (**)(void)) EXTI3_IRQVEC) = irq_handler;
- *((void (**)(void)) EXTI0_IRQVEC) = irq_handler_0;
- *((void (**)(void)) EXTI1_IRQVEC) = irq_handler_1;
- *((void (**)(void)) EXTI2_IRQVEC) = irq_handler_2;
- *((unsigned int *) NVIC_ISER0) |= NVIC_EXTI2_IRQ_BPOS |NVIC_EXTI1_IRQ_BPOS|NVIC_EXTI0_IRQ_BPOS;
- }
- void EnableInterrupts( void ) __attribute__( ( naked ) ) ;
- void EnableInterrupts( void ){
- __asm (
- " cpsie i\n" /* set I=0 */
- " bx lr\n"
- );
- }
- void main(void){
- appInit();
- count = 1;
- while(1) {
- *portBargraphOdrLow = count;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement