2018-12-28 09:27:49 +00:00
|
|
|
#define UART_RBR 0x01c28000
|
|
|
|
char* const UART_THR = (char* const)0x01c28000;
|
|
|
|
#define UART_IER 0x01c28004
|
|
|
|
char* const UART_LSR = (char* const)0x01c28014;
|
|
|
|
|
|
|
|
extern "C" int printk(const char*);
|
|
|
|
|
|
|
|
extern "C" int main(int argc, char** argv) {
|
|
|
|
char letter[2] = "A";
|
|
|
|
|
|
|
|
for (char c = 'A'; c < 'Z'; c++) {
|
|
|
|
letter[0] = c;
|
|
|
|
|
|
|
|
printk("HELLO WORLD!");
|
|
|
|
printk("\t");
|
|
|
|
printk(letter);
|
|
|
|
printk("\r\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
2018-12-28 08:20:09 +00:00
|
|
|
}
|
2018-12-28 09:27:49 +00:00
|
|
|
|
|
|
|
/* Never call this function directly: always use the printk,
|
|
|
|
* which disables and reenables interrupts */
|
|
|
|
extern "C" int c_printk(const char* msg) {
|
|
|
|
while (*msg != '\0') {
|
|
|
|
while ((*UART_LSR & 0x20) == 0); /* Wait for transmission */
|
|
|
|
*UART_THR = *msg;
|
|
|
|
msg++;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|