Sarik_Kumpan

Tx to Pc with switch interrupt

Nov 29th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.30 KB | None | 0 0
  1. #include "msp.h"
  2. #define SYSTICK_STCSR (*((volatile unsigned long *)0xE000E010))
  3. #define SYSTICK_STRVR (*((volatile unsigned long *)0xE000E014))
  4. #define SYSTICK_STCVR (*((volatile unsigned long *)0xE000E018))
  5.    
  6. void SysTick_Init(void);
  7. void SysTick_wait(uint32_t delay);
  8. void SysTick_wait1ms(uint32_t delay);
  9. void Port_Init(void);
  10. void UART0_init(void);
  11.  
  12. int main(void) {
  13.     SysTick_Init();
  14.     Port_Init();
  15.     UART0_init();
  16.    
  17.     while (1) {
  18.         P2OUT |= 0x01;
  19.         SysTick_wait1ms(200);
  20.         P2OUT &= ~0x01;
  21.         SysTick_wait1ms(200);
  22.     }
  23. }
  24.  
  25. void SysTick_Init(void) {
  26.     SYSTICK_STCSR = 0;
  27.     SYSTICK_STRVR = 0x00FFFFFF;
  28.     SYSTICK_STCVR = 0;
  29.     SYSTICK_STCSR = 0x00000005;
  30. }
  31.  
  32. void SysTick_wait(uint32_t delay) {
  33.     SYSTICK_STRVR = delay - 1;
  34.     SYSTICK_STCVR = 0;
  35.     while ((SYSTICK_STCSR & 0x00010000) == 0) {
  36.     }
  37. }
  38.  
  39. void SysTick_wait1ms(uint32_t delay) {
  40.     uint32_t i;
  41.     for (i = 0; i < delay; i++) {
  42.         SysTick_wait(3000);
  43.     }
  44. }
  45.  
  46. void Port_Init(void) {
  47.    
  48.     P5SEL1 = 0x00;
  49.     P5SEL0 = 0x00;
  50.     P5DIR = 0x00;
  51.     P5REN = 0x01;
  52.     P5OUT = 0x01;
  53.     P5IES = 0x01;
  54.     P5IFG = 0;
  55.     P5IE = 0x01;
  56.    
  57.     P6SEL1 = 0x00;
  58.     P6SEL0 = 0x00;
  59.     P6DIR = 0x00;
  60.     P6REN = 0x01;
  61.     P6OUT = 0x01;
  62.     P6IES = 0x01;
  63.     P6IFG = 0;
  64.     P6IE = 0x01;
  65.    
  66.     P2SEL1 = 0x00;
  67.     P2SEL0 = 0x00;
  68.     P2DIR = 0x07;
  69.     P2OUT = 0x00;
  70.    
  71.     NVIC_SetPriority(PORT5_IRQn,2);
  72.     NVIC_SetPriority(PORT6_IRQn,0);
  73.     NVIC_EnableIRQ(PORT5_IRQn);
  74.     NVIC_EnableIRQ(PORT6_IRQn);
  75.     __enable_irq();
  76. }
  77.  
  78. void PORT5_IRQHandler(void){
  79.     char buff[10] = "SW1 Active";
  80.     for (int i=0;i<10;i++){
  81.         while (!(EUSCI_A0->IFG & 0x02));
  82.         EUSCI_A0->TXBUF = buff[i];
  83.     }
  84.     while (!(EUSCI_A0->IFG & 0x02));
  85.     EUSCI_A0->TXBUF = 0x0a;
  86.     for (int i=0; i<3; i++){
  87.         P2OUT = 0x04;
  88.         SysTick_wait1ms(500);
  89.         P2OUT &= ~0x04;
  90.         SysTick_wait1ms(500);
  91.     }
  92.     P5IFG &= 0x00;
  93. }
  94.  
  95. void PORT6_IRQHandler(void){
  96.     char buff[10] = "SW2 Active";
  97.     for (int i=0;i<10;i++){
  98.         while (!(EUSCI_A0->IFG & 0x02));
  99.         EUSCI_A0->TXBUF = buff[i];
  100.     }
  101.     while (!(EUSCI_A0->IFG & 0x02));
  102.     EUSCI_A0->TXBUF = 0x0a;
  103.     for (int i=0; i<3; i++){
  104.         P2OUT = 0x02;
  105.         SysTick_wait1ms(500);
  106.         P2OUT &= ~0x02;
  107.         SysTick_wait1ms(500);
  108.     }
  109.     P6IFG &= 0x00;
  110. }
  111.  
  112. void UART0_init(void){
  113.     EUSCI_A0->CTLW0 |= 1;
  114.     EUSCI_A0->MCTLW = 0;
  115.     EUSCI_A0->CTLW0 = 0x0081;
  116.     EUSCI_A0->BRW = 312;
  117.     P1->SEL0 |= 0x0C;
  118.     P1->SEL1 &= ~0x0C;
  119.     EUSCI_A0->CTLW0 &= ~0x0001;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment