Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* * libMD407, driver_usart.c * Drivrutiner för STDIN_FILENO, STDOUT_FILENO och STDERR_FILENO */
- #include <libmd407.h>
- /* Deklarationer av de funktioner som ingår, krävs för tabellen */
- #define USART1 ((USART *) 0x40011000)
- #define BIT_UE (1<<13)
- #define BIT_TE (1<<3)
- #define BIT_RE (1<<2)
- #define BIT_RXNE (1<<5)
- #define BIT_TXE (1<<7)
- typedef struct tag_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;
- char _tstchar( void ){
- if( (USART1->sr & BIT_RXNE ) == BIT_RXNE)
- return (char) USART1->dr;
- return 0;
- }
- char _outchar( char c ){
- while(( USART1->sr & BIT_TXE ) == 0);
- USART1->dr = (unsigned short) c;
- }
- static int usart_init( int initval ) {
- USART1->brr = 0x2D9;
- USART1->cr2 = 0;
- USART1->cr1 = BIT_UE | BIT_TE | BIT_RE;
- }
- static void usart_deinit( int deinitval) {
- USART1->brr = 0;
- USART1->cr2=0;
- USART1->cr1 = 0;
- }
- static int usart_write(char *ptr, int len){
- for(int i = 0; i < len; i++){
- _outchar(*ptr++);
- }
- }
- static int usart_read(char *ptr, int len){
- char c = 0;
- while(!c){
- c = _tstchar();
- }
- ptr = c;
- //return c;
- }
- static int usart_isatty(void){ return 1; }
- DEV_DRIVER_DESC StdIn = {
- {"stdin"},
- usart_init,
- usart_deinit,
- 0,
- usart_isatty,
- 0,
- 0,
- 0,
- 0,
- usart_read
- };
- DEV_DRIVER_DESC StdOut = {
- {"stdout"},
- 0,
- 0,
- 0,
- usart_isatty,
- 0,
- 0,
- 0,
- usart_write,
- 0
- };
- DEV_DRIVER_DESC StdErr = {
- {"stderr"},
- 0,
- 0,
- 0,
- usart_isatty,
- 0,
- 0,
- 0,
- usart_write,
- 0
- };
Advertisement
Add Comment
Please, Sign In to add comment