Advertisement
nicx321

SerialControledDAC

Jul 5th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.82 KB | None | 0 0
  1. /*
  2.  * GccApplication3.c
  3.  *
  4.  * Created: 13.03.2018 15:41:25
  5.  * Author : nicx321
  6.  */
  7.  
  8. #include <avr/interrupt.h>
  9. #define F_CPU 3333333
  10. #define USART0_BAUD_RATE(BAUD_RATE) ((float)F_CPU * 64 / (16 * (float)BAUD_RATE))
  11. #include <avr/io.h>
  12. #include <util/delay.h>
  13.    
  14. void SendChr(char X){
  15.     while(!(USART0.STATUS & USART_DREIF_bm)){}
  16.     USART0.TXDATAL = X;
  17. }
  18. /*
  19. void SendStr(char *str){
  20.     int i = 0;
  21.     while(str[i] != '\0' && str[i] != 13){
  22.         while(!(USART0.STATUS & USART_DREIF_bm)){}
  23.         USART0.TXDATAL = str[i];
  24.         i++;
  25.     }
  26. }
  27. */
  28. char USART_readChr(){
  29.     while(!(USART0.STATUS & USART_RXCIF_bm));
  30.     return USART0.RXDATAL;
  31. }
  32.  
  33. void USART_read(char *cp)
  34. {
  35.     int state = 0;
  36.     if((USART0.STATUS & USART_RXCIF_bm))
  37.     {
  38.         while ((USART0.STATUS & USART_RXCIF_bm)){
  39.             cp[state] = USART0.RXDATAL;
  40.             state++;
  41.         }
  42.         cp[state+1]=0;
  43.     }
  44. }
  45.  
  46. void InitUart(){
  47.     PORTB.DIRSET = PIN2_bm; // RX pin as output
  48.     PORTB.OUTCLR = PIN2_bm; //
  49.     PORTB.DIRCLR = PIN3_bm; // TX pin set as input
  50.     PORTB_PIN3CTRL &= ~PORT_PULLUPEN_bm; // Leave it as pulled-off
  51.     USART0.BAUD = (uint16_t)USART0_BAUD_RATE(9600);
  52.     USART0.CTRLB = 0 << USART_MPCM_bp       /* Multi-processor Communication Mode: disabled */
  53.         | 0 << USART_ODME_bp     /* Open Drain Mode Enable: disabled */
  54.         | 1 << USART_RXEN_bp     /* Reciever enable: enabled */
  55.         | USART_RXMODE_NORMAL_gc /* Normal mode */
  56.         | 0 << USART_SFDEN_bp    /* Start Frame Detection Enable: disabled */
  57.         | 1 << USART_TXEN_bp;    /* Transmitter Enable: enabled */
  58.     USART0.CTRLA |= 0x80;
  59. }
  60.  
  61. void initDac43(){
  62.     VREF.CTRLA |= 0b00000011;
  63.     VREF.CTRLA &= 0b11111011;
  64.     DAC0.DATA = 0;
  65.     DAC0.CTRLA |= 0b11000001;
  66. }
  67.  
  68. int main(void)
  69. {  
  70.     initDac43();
  71.     PORTC.DIRSET = 1;
  72.     InitUart();
  73.     sei();
  74.     while(1){}
  75. }
  76.  
  77. ISR(USART0_RXC_vect){
  78.     cli();
  79.     char X = USART_readChr();
  80.     DAC0.DATA = X;
  81.     SendChr(X);
  82.     sei();
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement