A project to implement a console using the Mbed using VGA for video output and a PS/2 keyboard for the input. The eventual goal is to also include tools for managing SD cards, and a semi-self-hosting programming environment.

Dependencies:   PS2_MbedConsole fastlib SDFileSystem vga640x480g_mbedconsole lightvm mbed

MbedConsole is a cool little project to have a self-contained computer all on an Mbed. So far it has VGA and PS/2 support and can stand alone without a computer powering it. Next planned features are SD card support and a lightweight programmable VM complete with a file editor and self-hosted assembler.

You can view additional details about it at http://earlz.net/tags/mbedconsole

Committer:
earlz
Date:
Sun Sep 30 05:26:32 2012 +0000
Revision:
13:442bd2fb4ea0
Parent:
12:3ee3062cc11c
Child:
14:c42ae78003c6
finally a graphic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
earlz 1:eb209f0468de 1 #include "mbedconsole.h"
earlz 9:4211d638b2e9 2 #include "clock.h"
earlz 9:4211d638b2e9 3 #include "i2s.h"
earlz 9:4211d638b2e9 4 #include "nvic.h"
earlz 9:4211d638b2e9 5
earlz 9:4211d638b2e9 6
earlz 9:4211d638b2e9 7 PS2Keyboard *ps2kb;
earlz 0:6906dbde03da 8 DigitalOut myled(LED1);
earlz 0:6906dbde03da 9
earlz 1:eb209f0468de 10
earlz 1:eb209f0468de 11 Serial serial(USBTX, USBRX);
earlz 13:442bd2fb4ea0 12 ConsoleStream console("console");
earlz 0:6906dbde03da 13
earlz 10:bda85442b674 14 void keyboard_init();
earlz 0:6906dbde03da 15
earlz 0:6906dbde03da 16 int main() {
earlz 12:3ee3062cc11c 17 serial.baud(9600);
earlz 12:3ee3062cc11c 18 serial.puts("Resetting interrupt priorities...");
earlz 11:fede136943a9 19 //Set all priorities to 100 so we are able to make VGA a priority
earlz 11:fede136943a9 20 //By default, all priorities are at their highest 0
earlz 11:fede136943a9 21 NVIC_SetPriority( NonMaskableInt_IRQn, 100 );
earlz 11:fede136943a9 22 NVIC_SetPriority(MemoryManagement_IRQn, 100);
earlz 11:fede136943a9 23
earlz 11:fede136943a9 24 NVIC_SetPriority(BusFault_IRQn, 100);
earlz 11:fede136943a9 25 NVIC_SetPriority(UsageFault_IRQn, 100);
earlz 11:fede136943a9 26 NVIC_SetPriority(SVCall_IRQn, 100);
earlz 11:fede136943a9 27 NVIC_SetPriority(DebugMonitor_IRQn, 100);
earlz 11:fede136943a9 28 NVIC_SetPriority(PendSV_IRQn, 100);
earlz 12:3ee3062cc11c 29 NVIC_SetPriority(SysTick_IRQn, 50);
earlz 11:fede136943a9 30 NVIC_SetPriority(WDT_IRQn, 100);
earlz 12:3ee3062cc11c 31 NVIC_SetPriority(TIMER0_IRQn, 85);
earlz 12:3ee3062cc11c 32 NVIC_SetPriority(TIMER1_IRQn, 85);
earlz 12:3ee3062cc11c 33 NVIC_SetPriority(TIMER2_IRQn, 85);
earlz 12:3ee3062cc11c 34 NVIC_SetPriority(TIMER3_IRQn, 85);
earlz 12:3ee3062cc11c 35 NVIC_SetPriority(UART0_IRQn, 75);
earlz 11:fede136943a9 36 NVIC_SetPriority(UART1_IRQn, 100);
earlz 11:fede136943a9 37 NVIC_SetPriority(UART2_IRQn, 100);
earlz 11:fede136943a9 38 NVIC_SetPriority(UART3_IRQn, 100);
earlz 11:fede136943a9 39
earlz 11:fede136943a9 40 NVIC_SetPriority(PWM1_IRQn, 100);
earlz 11:fede136943a9 41 NVIC_SetPriority(I2C0_IRQn, 100);
earlz 11:fede136943a9 42 NVIC_SetPriority(I2C1_IRQn, 100);
earlz 11:fede136943a9 43 NVIC_SetPriority(I2C2_IRQn, 100);
earlz 11:fede136943a9 44 NVIC_SetPriority(SPI_IRQn, 100);
earlz 11:fede136943a9 45 NVIC_SetPriority(SSP0_IRQn, 100);
earlz 11:fede136943a9 46 NVIC_SetPriority(SSP1_IRQn, 100);
earlz 11:fede136943a9 47 NVIC_SetPriority(PLL0_IRQn, 100);
earlz 11:fede136943a9 48 NVIC_SetPriority(RTC_IRQn, 100);
earlz 11:fede136943a9 49 NVIC_SetPriority(EINT0_IRQn, 100);
earlz 11:fede136943a9 50 NVIC_SetPriority(EINT1_IRQn, 100);
earlz 11:fede136943a9 51
earlz 11:fede136943a9 52 NVIC_SetPriority(EINT2_IRQn, 100);
earlz 11:fede136943a9 53 NVIC_SetPriority(EINT3_IRQn, 100);
earlz 11:fede136943a9 54 NVIC_SetPriority(ADC_IRQn, 100);
earlz 11:fede136943a9 55 NVIC_SetPriority(BOD_IRQn, 100);
earlz 11:fede136943a9 56 NVIC_SetPriority(USB_IRQn, 100);
earlz 11:fede136943a9 57 NVIC_SetPriority(CAN_IRQn, 100);
earlz 11:fede136943a9 58 NVIC_SetPriority(DMA_IRQn, 100);
earlz 11:fede136943a9 59
earlz 11:fede136943a9 60 NVIC_SetPriority(I2S_IRQn, 100);
earlz 11:fede136943a9 61 NVIC_SetPriority(ENET_IRQn, 100);
earlz 11:fede136943a9 62 NVIC_SetPriority(RIT_IRQn, 100);
earlz 11:fede136943a9 63 NVIC_SetPriority(MCPWM_IRQn, 100);
earlz 11:fede136943a9 64 NVIC_SetPriority(QEI_IRQn, 100);
earlz 11:fede136943a9 65 NVIC_SetPriority(PLL1_IRQn, 100);
earlz 12:3ee3062cc11c 66 //serial.puts("Done!\r\n");
earlz 12:3ee3062cc11c 67 //serial.puts("Initializing VGA...");
earlz 12:3ee3062cc11c 68 //wait_ms(500);
earlz 0:6906dbde03da 69 init_vga();
earlz 10:bda85442b674 70 vga_cls();
earlz 12:3ee3062cc11c 71 //serial.puts("Done!\r\n");
earlz 12:3ee3062cc11c 72
earlz 12:3ee3062cc11c 73 //serial.puts("Initializing PS/2 Keyboard..");
earlz 12:3ee3062cc11c 74 //NVIC_SetPriority( EINT3_IRQn, 90 );
earlz 12:3ee3062cc11c 75 //wait_ms(500);
earlz 10:bda85442b674 76 keyboard_init();
earlz 9:4211d638b2e9 77 fl_select_clock_i2s(FL_CLOCK_DIV1); // assume 100MHz
earlz 9:4211d638b2e9 78 fl_i2s_set_tx_rate(1,4); // set 25 MHz pixel clock
earlz 0:6906dbde03da 79
earlz 9:4211d638b2e9 80
earlz 11:fede136943a9 81 NVIC_SetPriority( EINT3_IRQn, 90 );
earlz 12:3ee3062cc11c 82 //wait_ms(500);
earlz 12:3ee3062cc11c 83 //serial.puts("Done\r\n");
earlz 10:bda85442b674 84
earlz 12:3ee3062cc11c 85 //serial.puts("Entering mbedConsole shell\r\n");
earlz 13:442bd2fb4ea0 86
earlz 13:442bd2fb4ea0 87 freopen("/console", "w", stdout);
earlz 13:442bd2fb4ea0 88 setvbuf(stdout, NULL, _IONBF, 0);
earlz 13:442bd2fb4ea0 89 freopen("/console", "r", stdin);
earlz 13:442bd2fb4ea0 90 //setvbuf(stdout, NULL, _IONBF, 0);
earlz 13:442bd2fb4ea0 91 freopen("/console", "w", stderr);
earlz 13:442bd2fb4ea0 92 setvbuf(stderr, NULL, _IONBF, 0);
earlz 13:442bd2fb4ea0 93 //printf("test");
earlz 13:442bd2fb4ea0 94 //fflush(stdout);
earlz 0:6906dbde03da 95 while(1)
earlz 0:6906dbde03da 96 {
earlz 1:eb209f0468de 97 vputs("mbedConsole by Jordan Earls\n");
earlz 1:eb209f0468de 98 shell_begin();
earlz 0:6906dbde03da 99 }
earlz 0:6906dbde03da 100 }
earlz 13:442bd2fb4ea0 101
earlz 13:442bd2fb4ea0 102
earlz 13:442bd2fb4ea0 103
earlz 13:442bd2fb4ea0 104