Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.37 KB | None | 0 0
  1. /*
  2. * startup.c
  3. *
  4. */
  5. #define PORT_BARGRAPH_BASE 0x40020C00 /* MD407 port D */
  6. #define portBargraphOdrLow ((volatile unsigned char *) (PORT_BARGRAPH_BASE+0x14))
  7.  
  8. #define RCC_APB2ENR 0x40023844
  9. #define SYSCFG_BASE 0x40013800
  10. #define SYSCFG_EXTICR1 0x40013808
  11. #define RCC_APB2ENR 0x40023844
  12. #define EXTI_BASE 0x40013C00
  13. #define EXTI_IMR 0x40013C00
  14. //#define EXTI_EMR 0x40013C04
  15. #define EXTI_FTSR 0x40013C0C
  16. #define EXTI_RTSR 0x40013C08
  17. #define EXTI_PR 0x40013C14
  18. //#define NVIC_BASE 0xE000E010
  19. #define EXTI3_IRQVEC 0x2001C064
  20. #define EXTI2_IRQVEC 0x2001C060
  21. #define EXTI1_IRQVEC 0x2001C05C
  22. #define EXTI0_IRQVEC 0x2001C058
  23.  
  24. #define NVIC_ISER0 0xE000E100
  25. //#define NVIC_ICER0 0xE000E180
  26. //#define NVIC_ISPR0 0xE000E200
  27. #define NVIC_ICPR0 0xE000E280
  28. //#define NVIC_IABR0 0xE000E300
  29. #define NVIC_IPR0 0xE000E400
  30. #define NVIC_EXTI3_IRQ_BPOS (1<<9)
  31. #define NVIC_EXTI2_IRQ_BPOS (1<<8)
  32. #define NVIC_EXTI1_IRQ_BPOS (1<<7)
  33. #define NVIC_EXTI0_IRQ_BPOS (1<<6)
  34.  
  35. #define EXTI3_IRQ_BPOS0 1
  36. #define EXTI3_IRQ_BPOS1 (1<<1)
  37. #define EXTI3_IRQ_BPOS2 (1<<2)
  38. #define EXTI3_IRQ_BPOS (1<<3)
  39. #define EXTI3_IRQ_BPOSRES0 (1<<4)
  40. #define EXTI3_IRQ_BPOSRES1 (1<<5)
  41. #define EXTI3_IRQ_BPOSRES2 (1<<6)
  42.  
  43. #define EXTI2_IRQ_BPOS0 1
  44. #define EXTI2_IRQ_BPOS1 (1<<1)
  45. #define EXTI2_IRQ_BPOS2 (1<<2)
  46. #define EXTI2_IRQ_BPOS (1<<3)
  47. #define EXTI2_IRQ_BPOSRES0 (1<<4)
  48. #define EXTI2_IRQ_BPOSRES1 (1<<5)
  49. #define EXTI2_IRQ_BPOSRES2 (1<<6)
  50.  
  51. #define EXTI1_IRQ_BPOS0 1
  52. #define EXTI1_IRQ_BPOS1 (1<<1)
  53. #define EXTI1_IRQ_BPOS2 (1<<2)
  54. #define EXTI1_IRQ_BPOS (1<<3)
  55. #define EXTI1_IRQ_BPOSRES0 (1<<4)
  56. #define EXTI1_IRQ_BPOSRES1 (1<<5)
  57. #define EXTI1_IRQ_BPOSRES2 (1<<6)
  58.  
  59. #define EXTI0_IRQ_BPOS0 1
  60. #define EXTI0_IRQ_BPOS1 (1<<1)
  61. #define EXTI0_IRQ_BPOS2 (1<<2)
  62. #define EXTI0_IRQ_BPOS (1<<3)
  63. #define EXTI0_IRQ_BPOSRES0 (1<<4)
  64. #define EXTI0_IRQ_BPOSRES1 (1<<5)
  65. #define EXTI0_IRQ_BPOSRES2 (1<<6)
  66.  
  67. #define GPIO_E 0x40021000
  68. #define GPIOE_MODER ((volatile unsigned int *) (GPIO_E))
  69. #define GPIOE_IDR_LOW ((volatile unsigned char *) (GPIO_E+0x10))
  70. #define GPIOE_ODR_LOW ((volatile unsigned char *) (GPIO_E+0x14))
  71.  
  72. char count, lit;
  73.  
  74. void startup(void) __attribute__((naked)) __attribute__((section (".start_section")) );
  75.  
  76. void startup ( void ){
  77. __asm volatile(
  78. " LDR R0,=0x2001C000\n" /* set stack */
  79. " MOV SP,R0\n"
  80. " BL main\n" /* call main */
  81. "_exit: B .\n" /* never return */
  82. ) ;
  83. }
  84.  
  85. /*void irq_handler(void) {
  86.  
  87.  
  88. if (*((unsigned int *) EXTI_PR) & EXTI1_IRQ_BPOS) {
  89. if (*GPIOE_IDR_LOW & EXTI1_IRQ_BPOS0) {
  90. *GPIOE_ODR_LOW |= EXTI1_IRQ_BPOSRES0;
  91. *GPIOE_ODR_LOW &= 0xEF;
  92. count++;
  93. }
  94. if (*GPIOE_IDR_LOW & EXTI2_IRQ_BPOS1) {
  95. *GPIOE_ODR_LOW |= EXTI2_IRQ_BPOSRES1;
  96. *GPIOE_ODR_LOW &= 0xDF;
  97. count = 0;
  98. }
  99. if (*GPIOE_IDR_LOW & EXTI3_IRQ_BPOS2) {
  100. *GPIOE_ODR_LOW |= EXTI3_IRQ_BPOSRES2;
  101. *GPIOE_ODR_LOW &= 0xBF;
  102. if (lit) {
  103. lit = 0;
  104. }
  105. else {
  106. lit = 1;
  107. }
  108. }
  109.  
  110.  
  111.  
  112. *((unsigned int *) EXTI_PR) |= EXTI1_IRQ_BPOS;
  113. *((unsigned int *) EXTI_PR) |= EXTI2_IRQ_BPOS;
  114. *((unsigned int *) EXTI_PR) |= EXTI3_IRQ_BPOS;
  115. }
  116. }
  117. */
  118. void irq_handler_0(void) {
  119. //if (*((unsigned int *) EXTI_PR) & EXTI0_IRQ_BPOS) {
  120. count++;
  121. if (*GPIOE_IDR_LOW & EXTI0_IRQ_BPOS0) {
  122. *GPIOE_ODR_LOW |= EXTI0_IRQ_BPOSRES0;
  123. *GPIOE_ODR_LOW &= 0xEF;
  124. count++;
  125. }
  126.  
  127. *((unsigned int *) EXTI_PR) |= EXTI0_IRQ_BPOS;
  128. //}
  129. }
  130.  
  131. void irq_handler_1(void) {
  132. if (*GPIOE_IDR_LOW & EXTI1_IRQ_BPOS1) {
  133. *GPIOE_ODR_LOW |= EXTI1_IRQ_BPOSRES1;
  134. *GPIOE_ODR_LOW &= 0xDF;
  135. count = 0;
  136. }
  137.  
  138. *((unsigned int *) EXTI_PR) |= EXTI1_IRQ_BPOS;
  139. }
  140.  
  141. void irq_handler_2(void) {
  142. if (*GPIOE_IDR_LOW & EXTI2_IRQ_BPOS2) {
  143. *GPIOE_ODR_LOW |= EXTI2_IRQ_BPOSRES2;
  144. *GPIOE_ODR_LOW &= 0xBF;
  145. if (*portBargraphOdrLow) {
  146. count = 0;
  147. }
  148. else {
  149. count = 0xFF;
  150. }
  151. }
  152.  
  153. *((unsigned int *) EXTI_PR) |= EXTI2_IRQ_BPOS;
  154. }
  155. void appInit(void) {
  156. #ifdef USBDM
  157. *((unsigned long *) 0x40023830) = 0x18;
  158. *((unsigned long *) 0x40023844) |= 0x4000;
  159. *((unsigned long *) 0xE000ED08) = 0x2001C000;
  160. #endif
  161.  
  162. *((unsigned long *) 0x40020C00) = 0x00005555; //MODER D
  163. *GPIOE_MODER = 0x00005500;
  164. //lit = 1;
  165. count = 0;
  166.  
  167. //Set PE3 as IRQ port, negativ flanktrig
  168. *((unsigned int *) RCC_APB2ENR) |= 0x4000; //Enable SYSCFG clock
  169. *((unsigned int *) SYSCFG_EXTICR1) |= 0x0444; //PE3 -> All but EXTI3
  170.  
  171. //Config mask bit to the interrupt line (EXTI_IMR)
  172. //*((unsigned int *) EXTI_IMR) |= EXTI3_IRQ_BPOS;
  173. *((unsigned int *) EXTI_IMR) |= EXTI2_IRQ_BPOS2;
  174. *((unsigned int *) EXTI_IMR) |= EXTI1_IRQ_BPOS1;
  175. *((unsigned int *) EXTI_IMR) |= EXTI0_IRQ_BPOS0;
  176.  
  177. //Config trigger bit selection of the interrupt line
  178. *((unsigned int *) EXTI_FTSR) &= ~(EXTI2_IRQ_BPOS2 |EXTI1_IRQ_BPOS1 |EXTI0_IRQ_BPOS0);
  179. *((unsigned int *) EXTI_RTSR) |= (EXTI2_IRQ_BPOS2 |EXTI1_IRQ_BPOS1 |EXTI0_IRQ_BPOS0);
  180.  
  181. //Set interrupt vector
  182. //*((void (**)(void)) EXTI3_IRQVEC) = irq_handler;
  183. *((void (**)(void)) EXTI0_IRQVEC) = irq_handler_0;
  184. *((void (**)(void)) EXTI1_IRQVEC) = irq_handler_1;
  185. *((void (**)(void)) EXTI2_IRQVEC) = irq_handler_2;
  186.  
  187. *((unsigned int *) NVIC_ISER0) |= NVIC_EXTI2_IRQ_BPOS |NVIC_EXTI1_IRQ_BPOS|NVIC_EXTI0_IRQ_BPOS;
  188. }
  189.  
  190. void EnableInterrupts( void ) __attribute__( ( naked ) ) ;
  191. void EnableInterrupts( void ){
  192. __asm (
  193. " cpsie i\n" /* set I=0 */
  194. " bx lr\n"
  195. );
  196. }
  197.  
  198. void main(void){
  199. appInit();
  200. count = 1;
  201. while(1) {
  202.  
  203. *portBargraphOdrLow = count;
  204.  
  205. }
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement