Advertisement
Mary_99

DBGU final

Dec 11th, 2020
642
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.48 KB | None | 0 0
  1. #include <stdint.h>
  2. #include <stdio.h>
  3. #include <stdbool.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #include "include/AT91SAM9263.h"
  7.  
  8. //-------------------------DBGU_IDR-----------------------------------//
  9. #define DISABLE_RXRDY_INTERRUPT AT91C_US_RXRDY
  10. #define DISABLE_TXRDY_INTERRUPT AT91C_US_TXRDY
  11. #define DISABLE_END_OF_RECIVE_TRANSFER_INPUT AT91C_US_ENDRX
  12. #define DISBLE_END_OF_TRNASMIT_INTERRUPT AT91C_US_ENDTX
  13. #define DISABLE_OVERRUN_INTERRUPT AT91C_US_OVRE
  14. #define DISABLE_FRAMING_ERROR_INTERUPT AT91C_US_FRAME
  15. #define DISABLE_PARITY_ERROR_INTERRUPT AT91C_US_PARE
  16. #define DISABLE_TXEMPTY_INTERRUPT AT91C_US_TXEMPTY
  17. #define DISABLE_TXBUFE_INTERRUPT AT91C_US_TXBUFE
  18. #define DISABLE_RXBUFF_INTERUPT AT91C_US_RXBUFF
  19. #define DISABLE_COMM_TX_INTERRUPT AT91C_US_COMM_TX //30
  20. #define DISABLE_COMM_RX_INTERRUPT AT91C_US_COMM_RX //31
  21. #define DISABLE_RECIVER AT91C_US_RXDIS
  22. #define DISABLE_TRANSIMTER AT91C_US_TXDIS
  23.  
  24. #define CAPITAL_A_ASCII 65
  25. #define LOWER_A_ASCII 97
  26. #define CAPITAL_Z_ASCII 90
  27. #define LOWER_Z_ASCII 122
  28.  
  29. void disableInterrupts(void)
  30. {
  31.   AT91C_BASE_DBGU->DBGU_IDR = (DISABLE_RXRDY_INTERRUPT|DISABLE_TXRDY_INTERRUPT|DISABLE_END_OF_RECIVE_TRANSFER_INPUT|DISBLE_END_OF_TRNASMIT_INTERRUPT|
  32.                               DISABLE_OVERRUN_INTERRUPT|DISABLE_FRAMING_ERROR_INTERUPT|DISABLE_PARITY_ERROR_INTERRUPT|DISABLE_TXEMPTY_INTERRUPT|
  33.                               DISABLE_TXBUFE_INTERRUPT|DISABLE_RXBUFF_INTERUPT|DISABLE_COMM_TX_INTERRUPT|DISABLE_COMM_RX_INTERRUPT); //desactivate debug interrupt
  34. }
  35.  
  36. void configurePeripheralPorts(void)
  37. {
  38.   AT91C_BASE_PIOC->PIO_ASR |= AT91C_PIO_PC30; // debug receiver data RxD//Pio Periherial A select Register//reciver
  39.   AT91C_BASE_PIOC->PIO_PDR |= AT91C_PIO_PC30; //PIO Disable Register
  40.  
  41.   AT91C_BASE_PIOC->PIO_ASR |= AT91C_PIO_PC31; //debug receiver data TXD //transmitter
  42.   AT91C_BASE_PIOC->PIO_PDR |= AT91C_PIO_PC31;
  43. }
  44.  
  45. void turnOffReciver(void)
  46. {
  47.   AT91C_BASE_DBGU->DBGU_CR |= AT91C_US_RSTRX; //reset and turn off/disable receiver
  48. }
  49.  
  50. void turnOffTransmitter(void)
  51. {
  52.     AT91C_BASE_DBGU->DBGU_CR |= AT91C_US_RSTTX; // reset and turn off/disable treansmitter
  53. }
  54.  
  55. void disabeReciver(void)
  56. {
  57.   AT91C_BASE_DBGU->DBGU_CR |= DISABLE_RECIVER; //reset and turn off/disable receiver
  58. }
  59.  
  60. void disableTransmitter(void)
  61. {
  62.     AT91C_BASE_DBGU->DBGU_CR |= DISABLE_TRANSIMTER; // reset and disable treansmitter
  63. }
  64.  
  65. void configureThroughput(void)
  66. {
  67.   AT91C_BASE_DBGU->DBGU_BRGR = 115200; // MCK mster CLock/ (CD //clock Divisor *16) //baud Rate Generator Register //speed of transmiition
  68. }
  69.  
  70. void configureOperationMode(void)
  71. {
  72.     AT91C_BASE_DBGU->DBGU_MR = AT91C_US_CHMODE_NORMAL| AT91C_US_PAR_NONE ; // set nomral mode 14 15 bit 0 0 // set no parity
  73. }
  74.  
  75. void turnOnReciver(void)
  76. {
  77.     AT91C_BASE_DBGU->DBGU_CR |= AT91C_US_RXEN;
  78. }
  79.  
  80. void turnOnTransmitter(void)
  81. {
  82.   AT91C_BASE_DBGU->DBGU_CR |= AT91C_US_TXEN;
  83. }
  84.  
  85. void dbguInit(void)
  86. {
  87.   disableInterrupts();
  88.   turnOffReciver();
  89.   turnOffTransmitter();
  90.   disabeReciver();
  91.   disableTransmitter();
  92.   configurePeripheralPorts();
  93.   configureThroughput();
  94.   configureOperationMode();
  95.   turnOnReciver();
  96.   turnOnTransmitter();
  97. }
  98.  
  99. bool isCapital(char letter)
  100. {
  101.   return (letter >= CAPITAL_A_ASCII && letter <= CAPITAL_Z_ASCII);
  102. }
  103.  
  104. bool isLower(char letter)
  105. {
  106.   return (letter >= LOWER_A_ASCII  && letter <= LOWER_Z_ASCII );
  107. }
  108.  
  109. char letterConversion(char letter)
  110. {
  111.   if(isCapital(letter))
  112.   {
  113.     return tolower(letter);
  114.   }
  115.   else if(isLower(letter))
  116.   {
  117.     return toupper(letter);
  118.   }
  119.   else
  120.   {
  121.     return letter;
  122.   }
  123. }
  124.  
  125. void dbguPrintAscii(const char buffer)
  126. {
  127.     while(!(AT91C_BASE_DBGU->DBGU_CSR & DISABLE_TXRDY_INTERRUPT)){}; //wait until Tx buffer busy - checj TXRDY flag
  128.     //CSR channel status regster //TXRDY Interrupt
  129.     AT91C_BASE_DBGU->DBGU_THR = letterConversion(buffer); //write a singel char to Transmitter Holding Register
  130. }
  131.  
  132. char dbguReadAscii(char buffer)
  133. {
  134.     while(!(AT91C_BASE_DBGU->DBGU_CSR & DISABLE_RXRDY_INTERRUPT)){};//data avaible
  135.     buffer = AT91C_BASE_DBGU->DBGU_RHR;
  136.     //return buffer;
  137. }
  138.  
  139. void dbguPrintAsciiForAlphabet(const char buffer)
  140. {
  141.     while(!(AT91C_BASE_DBGU->DBGU_CSR & DISABLE_TXRDY_INTERRUPT)){}; //wait until Tx buffer busy - checj TXRDY flag
  142.     //CSR channel status regster //TXRDY Interrupt
  143.     AT91C_BASE_DBGU->DBGU_THR = buffer; //write a singel char to Transmitter Holding Register
  144. }
  145.  
  146. void printChars()
  147. {
  148.   char upper;
  149.   char lower;
  150.   for(upper ='A'; upper<= 'Z';++upper)
  151.   {
  152.     dbguPrintAsciiForAlphabet(upper);
  153.   }
  154.   for (lower ='a'; lower<= 'z';++lower)
  155.   {
  156.     dbguPrintAsciiForAlphabet(lower);
  157.   }
  158. }
  159. void printMessage(char*StringToPrint)
  160. {
  161.   int iterrator = 0;
  162.   while(StringToPrint[iterrator] != '\0')
  163.   {
  164.     while(!(AT91C_BASE_DBGU->DBGU_CSR & DISABLE_TXRDY_INTERRUPT)){}; //wait until Tx buffer busy - checj TXRDY flag
  165.     //CSR channel status regster //TXRDY Interrupt
  166.     AT91C_BASE_DBGU->DBGU_THR =StringToPrint[iterrator]; //write a singel char to Transmitter Holding Register
  167.     iterrator++;
  168.   }
  169. }
  170.  
  171. int main()
  172. {
  173.   dbguInit();
  174.   char newLine = '\n';
  175.   printChars();
  176.   dbguPrintAscii(newLine);
  177.   char input2;
  178.  
  179.   char* text = "My String to print";
  180.   dbguPrintAscii(newLine);
  181.   dbguPrintAscii(newLine);
  182.   printMessage(text);
  183.   dbguPrintAscii(newLine);
  184.   dbguPrintAscii(newLine);
  185.   char input = 't';
  186.   dbguPrintAscii(input);
  187.   dbguPrintAscii(newLine);
  188.   char character;
  189.   while(true)
  190.   {
  191.     character = dbguReadAscii(character);
  192.     dbguPrintAscii(character);
  193.   }
  194.   return 0;
  195. }
  196.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement