DAT290 / kod / USART_dump / USART_dump.c
USART_dump.c
Raw
#include "USART_dump.h"

/*
Allows for simple debugging of modules. Header only makes DUMP() visible.
*/
typedef struct USART {
    volatile unsigned short sr;
    volatile unsigned short Unused0;
    volatile unsigned short dr;
    volatile unsigned short Unused1;
    volatile unsigned short brr;
    volatile unsigned short Unused2;
    volatile unsigned short cr1;
    volatile unsigned short Unused3;
    volatile unsigned short cr2;
    volatile unsigned short Unused4;
    volatile unsigned short cr3;
    volatile unsigned short Unused5;
    volatile unsigned short gtpr;
} USART;

#define USARTtest  ((USART *) 0x40011000) 

void _outchar( char c ) {
    /* write character to usart1 */
    while (( USARTtest->sr & 0x80)==0);
    USARTtest->dr = (unsigned short) c;
    if( c == '\n')
            _outchar('\r');
}

char _tstchar(void) {
    /* see if character arrived at usart1,
        if not, return 0
        else return character
        */
    if( (USARTtest->sr & 0x20)==0)
        return 0;
    return (char) USARTtest->dr;
}

char _getchar(void) {
    /* wait until character arrived at usart1,
        return character
        */
    while( (USARTtest->sr & 0x20)==0)
        ;
    return (char) USARTtest->dr;
}

void usart_send(char* s){
   while (*s != '\0')
       _outchar(*(s++));
}

void DUMP(char *s) {
   usart_send(s);
   _outchar('\n');
}