RTno is communicating library and framework which allows you to make your embedded device capable of communicating with RT-middleware world. RT-middleware is a platform software to realize Robotic system. In RTM, robots are developed by constructing robotics technologies\' elements (components) named RT-component. Therefore, the RTno helps you to create your own RT-component with your mbed and arduino. To know how to use your RTno device, visit here: http://ysuga.net/robot_e/rtm_e/rtc_e/1065?lang=en To know about RT-middleware and RT-component, visit http://www.openrtm.org

Dependencies:   EthernetNetIf

Dependents:   RTnoV3_LED RTnoV3_Template RTnoV3_ADC RTnoV3_Timer ... more

Committer:
ysuga
Date:
Thu Feb 09 02:33:10 2012 +0000
Revision:
0:9fac71a0bff3
RTno Version 3: RTno is a software library and tool to connect embedded devices like arduino and mbed to RT-middleware world.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ysuga 0:9fac71a0bff3 1 #define RTNO_SUBMODULE_DEFINE
ysuga 0:9fac71a0bff3 2
ysuga 0:9fac71a0bff3 3 #include "mbed.h"
ysuga 0:9fac71a0bff3 4 #include "UART.h"
ysuga 0:9fac71a0bff3 5
ysuga 0:9fac71a0bff3 6 #define UART_RX_BUFFER_SIZE 128
ysuga 0:9fac71a0bff3 7
ysuga 0:9fac71a0bff3 8 static Serial *m_pSerial;
ysuga 0:9fac71a0bff3 9 unsigned char uart_rx_buffer[UART_RX_BUFFER_SIZE];
ysuga 0:9fac71a0bff3 10 int uart_rx_buffer_pointer_head = 0;
ysuga 0:9fac71a0bff3 11 int uart_rx_buffer_pointer_tail = 0;
ysuga 0:9fac71a0bff3 12
ysuga 0:9fac71a0bff3 13
ysuga 0:9fac71a0bff3 14 /**
ysuga 0:9fac71a0bff3 15 * Push data to ring buffer.
ysuga 0:9fac71a0bff3 16 */
ysuga 0:9fac71a0bff3 17 int uart_rx_buffer_push(unsigned char c) {
ysuga 0:9fac71a0bff3 18 uart_rx_buffer[uart_rx_buffer_pointer_tail] = c;
ysuga 0:9fac71a0bff3 19 uart_rx_buffer_pointer_tail++;
ysuga 0:9fac71a0bff3 20 if(uart_rx_buffer_pointer_tail >= UART_RX_BUFFER_SIZE) {
ysuga 0:9fac71a0bff3 21 uart_rx_buffer_pointer_tail = 0;
ysuga 0:9fac71a0bff3 22 }
ysuga 0:9fac71a0bff3 23 return 0;
ysuga 0:9fac71a0bff3 24 }
ysuga 0:9fac71a0bff3 25
ysuga 0:9fac71a0bff3 26 /**
ysuga 0:9fac71a0bff3 27 * Pop data fron ring buffer
ysuga 0:9fac71a0bff3 28 */
ysuga 0:9fac71a0bff3 29 int uart_rx_buffer_pop(unsigned char *c) {
ysuga 0:9fac71a0bff3 30 *c = uart_rx_buffer[uart_rx_buffer_pointer_head];
ysuga 0:9fac71a0bff3 31 uart_rx_buffer_pointer_head++;
ysuga 0:9fac71a0bff3 32 if(uart_rx_buffer_pointer_head >= UART_RX_BUFFER_SIZE) {
ysuga 0:9fac71a0bff3 33 uart_rx_buffer_pointer_head = 0;
ysuga 0:9fac71a0bff3 34 }
ysuga 0:9fac71a0bff3 35 return 0;
ysuga 0:9fac71a0bff3 36 }
ysuga 0:9fac71a0bff3 37
ysuga 0:9fac71a0bff3 38 int uart_rx_buffer_get_size() {
ysuga 0:9fac71a0bff3 39 int size = uart_rx_buffer_pointer_tail - uart_rx_buffer_pointer_head;
ysuga 0:9fac71a0bff3 40 if(size < 0) {
ysuga 0:9fac71a0bff3 41 size += UART_RX_BUFFER_SIZE;
ysuga 0:9fac71a0bff3 42 }
ysuga 0:9fac71a0bff3 43 return size;
ysuga 0:9fac71a0bff3 44 }
ysuga 0:9fac71a0bff3 45
ysuga 0:9fac71a0bff3 46 void rx_isr(void) {
ysuga 0:9fac71a0bff3 47 uart_rx_buffer_push(m_pSerial->getc());
ysuga 0:9fac71a0bff3 48 }
ysuga 0:9fac71a0bff3 49
ysuga 0:9fac71a0bff3 50
ysuga 0:9fac71a0bff3 51
ysuga 0:9fac71a0bff3 52 void UART_init(unsigned char num, unsigned long baudrate)
ysuga 0:9fac71a0bff3 53 {
ysuga 0:9fac71a0bff3 54 PinName rx, tx;
ysuga 0:9fac71a0bff3 55 switch(num) {
ysuga 0:9fac71a0bff3 56 case 0:
ysuga 0:9fac71a0bff3 57 rx = USBRX; tx = USBTX;
ysuga 0:9fac71a0bff3 58 break;
ysuga 0:9fac71a0bff3 59 case 1:
ysuga 0:9fac71a0bff3 60 tx = p9, rx = p10;
ysuga 0:9fac71a0bff3 61 break;
ysuga 0:9fac71a0bff3 62 case 2:
ysuga 0:9fac71a0bff3 63 tx = p13, rx = p14;
ysuga 0:9fac71a0bff3 64 break;
ysuga 0:9fac71a0bff3 65 case 3:
ysuga 0:9fac71a0bff3 66 tx = p28, rx = p27;
ysuga 0:9fac71a0bff3 67 break;
ysuga 0:9fac71a0bff3 68 }
ysuga 0:9fac71a0bff3 69
ysuga 0:9fac71a0bff3 70 m_pSerial = new Serial(tx, rx);
ysuga 0:9fac71a0bff3 71 m_pSerial->baud(baudrate);
ysuga 0:9fac71a0bff3 72 m_pSerial->attach(rx_isr, Serial::RxIrq);
ysuga 0:9fac71a0bff3 73
ysuga 0:9fac71a0bff3 74 SerialDevice_putc = UART_putc;
ysuga 0:9fac71a0bff3 75 SerialDevice_getc = UART_getc;
ysuga 0:9fac71a0bff3 76 SerialDevice_available = UART_available;
ysuga 0:9fac71a0bff3 77 }
ysuga 0:9fac71a0bff3 78
ysuga 0:9fac71a0bff3 79 void UART_putc(const char c) {
ysuga 0:9fac71a0bff3 80 m_pSerial->putc(c);
ysuga 0:9fac71a0bff3 81 }
ysuga 0:9fac71a0bff3 82
ysuga 0:9fac71a0bff3 83 uint8_t UART_available()
ysuga 0:9fac71a0bff3 84 {
ysuga 0:9fac71a0bff3 85 return uart_rx_buffer_get_size();
ysuga 0:9fac71a0bff3 86 }
ysuga 0:9fac71a0bff3 87
ysuga 0:9fac71a0bff3 88
ysuga 0:9fac71a0bff3 89 char UART_getc()
ysuga 0:9fac71a0bff3 90 {
ysuga 0:9fac71a0bff3 91 unsigned char c;
ysuga 0:9fac71a0bff3 92 uart_rx_buffer_pop(&c);
ysuga 0:9fac71a0bff3 93 return c;
ysuga 0:9fac71a0bff3 94 }