Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. /*
  2. * startup.c
  3. *
  4. */
  5. #define SIMULATOR
  6.  
  7. #define GPIO_D 0x40020C00
  8. #define GPIO_MODER ((volatile unsigned int *) (GPIO_D))
  9. #define GPIO_OTYPER ((volatile unsigned short *) (GPIO_D + 0x4))
  10. #define GPIO_PUPDR ((volatile unsigned int *) (GPIO_D + 0xC))
  11. #define GPIO_IDR_LOW ((volatile unsigned char *) (GPIO_D + 0x10))
  12. #define GPIO_IDR_HIGH ((volatile unsigned char *) (GPIO_D + 0x11))
  13. //define GPIO_IDR_reserve
  14. #define GPIO_ODR_LOW ((volatile unsigned char *) (GPIO_D + 0x14))
  15. #define GPIO_ODR_HIGH ((volatile unsigned char *) (GPIO_D + 0x15))
  16. //define GPIO_ODR_reserve
  17.  
  18. #define STK_CTRL ((volatile unsigned int *)(0xE000E010))
  19. #define STK_LOAD ((volatile unsigned int *)(0xE000E014))
  20. #define STK_VAL ((volatile unsigned int *)(0xE000E018))
  21.  
  22. #ifdef SIMULATOR
  23. #define DELAY_COUNT 100
  24. #else
  25. #define DELAY_COUNT 1000000
  26. #endif
  27.  
  28. int systick_flag = 1;
  29. static volatile int delay_count;
  30.  
  31. void startup(void) __attribute__((naked)) __attribute__((section (".start_section")) );
  32.  
  33. void startup ( void ){
  34. __asm volatile(
  35. " LDR R0,=0x2001C000\n" /* set stack */
  36. " MOV SP,R0\n"
  37. " BL main\n" /* call main */
  38. "_exit: B .\n" /* never return */
  39. ) ;
  40. }
  41. void delay_250ns( void ) {
  42. /* SystemCoreClock = 168000000 */
  43. *STK_CTRL = 0;
  44. *STK_LOAD = ( (168/4) -1 );
  45. *STK_VAL = 0;
  46. *STK_CTRL = 5;
  47.  
  48. while( (*STK_CTRL & 0x10000 )== 0 ){
  49.  
  50. }
  51. *STK_CTRL = 0;
  52. }
  53. void delay_1mikro( void ){
  54. // sYSTEMcOREcLOCK = 168000000
  55. *STK_CTRL = 0;
  56. *STK_LOAD = ( 168 - 1);
  57. *STK_VAL = 0;
  58. *STK_CTRL = 7;
  59. systick_flag = 0;
  60. }
  61. void delay(unsigned int count){
  62. delay_count = count;
  63. if( count == 0){
  64. return;
  65. }
  66. delay_1mikro();
  67. }
  68. void systick_irq_handler(void){
  69. *STK_CTRL = 0;
  70. delay_count--;
  71. if( delay_count > 0){
  72. delay_1mikro();
  73. }
  74. else{
  75. systick_flag = 1;
  76. }
  77.  
  78. }
  79. void init_app( void){
  80. /* Initiera port D */
  81. * ( (unsigned long *) 0x40020C00) = 0x00005555;
  82. /* Initiera undantagsvektor */
  83. *((void (**)( void )) 0x2001C03C) = systick_irq_handler;
  84. }
  85. void main(void){
  86. init_app();
  87. delay( DELAY_COUNT );
  88. *GPIO_ODR_LOW = 0XFF;
  89. while(1){
  90. if( systick_flag == 1 ){
  91. break;
  92. //Här placeras kod som kan utföras under väntetiden
  93. }
  94. //Här finns den kod som "väntar på time-out
  95. }
  96. *GPIO_ODR_LOW = 0;
  97. //
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement