debug_at91.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00045 #include <arch/arm/debug_at91.h>
00046
00047 #include <dev/debug.h>
00048 #include <sys/timer.h>
00049
00050
00055
00063 uint32_t At91BaudRateDiv(uint32_t baud)
00064 {
00065 return (NutArchClockGet(NUT_HWCLK_PERIPHERAL) / (8 * baud) + 1) / 2;
00066 }
00067
00075 int At91DevDebugIOCtl(NUTDEVICE * dev, int req, void *conf)
00076 {
00077 if(req == UART_SETSPEED) {
00078 outr(dev->dev_base + US_BRGR_OFF, At91BaudRateDiv(*((uint32_t *)conf)));
00079 return 0;
00080 }
00081 return -1;
00082 }
00083
00090 static void DebugPut(CONST NUTDEVICE * dev, char ch)
00091 {
00092 if (ch == '\n') {
00093 while ((inr(dev->dev_base + US_CSR_OFF) & US_TXRDY) == 0);
00094 outr(dev->dev_base + US_THR_OFF, '\r');
00095 }
00096 while ((inr(dev->dev_base + US_CSR_OFF) & US_TXRDY) == 0);
00097 outr(dev->dev_base + US_THR_OFF, ch);
00098 }
00099
00108 int At91DevDebugWrite(NUTFILE * fp, CONST void *buffer, int len)
00109 {
00110 int c = len;
00111 CONST char *cp = buffer;
00112
00113 while (c--) {
00114 DebugPut(fp->nf_dev, *cp++);
00115 }
00116 return len;
00117 }
00118
00124 NUTFILE *At91DevDebugOpen(NUTDEVICE * dev, CONST char *name, int mode, int acc)
00125 {
00126 NUTFILE *fp = (NUTFILE *) (dev->dev_dcb);
00127
00128 fp->nf_next = 0;
00129 fp->nf_dev = dev;
00130 fp->nf_fcb = 0;
00131
00132 return fp;
00133 }
00134
00140 int At91DevDebugClose(NUTFILE * fp)
00141 {
00142 return 0;
00143 }
00144