Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef SIMULATOR
- #define DELAY_COUNT 100
- #else
- #define DELAY_COUNT 1000000
- #endif
- volatile int systick_flag;
- volatile int delay_count;
- #define GPIO_D 0x40020C00
- #define GPIO_MODER ((volatile unsigned int *) (GPIO_D))
- #define GPIO_OTYPER ((volatile unsigned short *) (GPIO_D+0x4))
- #define GPIO_PUPDR ((volatile unsigned int *) (GPIO_D+0xC))
- #define GPIO_IDR_LOW ((volatile unsigned char *) (GPIO_D+0x10))
- #define GPIO_IDR_HIGH ((volatile unsigned char *) (GPIO_D+0x11))
- #define GPIO_ODR_LOW ((volatile unsigned char *) (GPIO_D+0x14))
- #define GPIO_ODR_HIGH ((volatile unsigned char *) (GPIO_D+0x15))
- #define STK_CTRL ((volatile unsigned int *)(0xE000E010))
- #define STK_LOAD ((volatile unsigned int *)(0xE000E014))
- #define STK_VAL ((volatile unsigned int *)(0xE000E018))
- //_______________________________________________________________________________________________________________________________________________________________
- void init_app(void){
- *GIPO_MODER = 0x55555555;
- }
- void delay_1mikro( void )
- {
- *STK_CTRL = 0;
- *STK_LOAD = ( 168 -1 );
- *STK_VAL = 0;
- *STK_CTRL = 7;
- }
- void delay( unsigned int count )
- {
- if( count == 0)
- return;
- delay_count = count;
- systick_flag = 0;
- delay_1mikro();
- }
- void systick_irq_handler( void )
- {
- *STK_CTRL = 0;
- delay_count -- ;
- if( delay_count > 0 )
- delay_1mikro();
- else
- systick_flag = 1;
- }
- //_______________________________________________________________________________________________________________________________________________________________
- 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 main(void)
- {
- init_app();
- *GIPO_ODR_LOW = 0;
- delay(DELAY_COUNT);
- *GIPO_ODR_LOW = 0xFF;
- while(1){
- if(systick_flag){
- break;
- //kod som kan utföras under väntetiden
- }
- //Kod som "väntar" på time-out
- *GPIO_ODR_LOW = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement