modify to nucleo stm32F411

Dependencies:   RingBuffer

Dependents:   MX_control Program_BEAR_Protocol SwitchMode BEAR_Motion ... more

Fork of iSerial by Yoji KURODA

Committer:
ykuroda
Date:
Sat Sep 01 12:28:28 2012 +0000
Revision:
3:d5353b68105f
Parent:
2:3fc74f4d685a
Child:
4:b38ef9675d39
name change

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ykuroda 3:d5353b68105f 1 //
ykuroda 3:d5353b68105f 2 // iSerial.cpp ... Serial Driver with Interrupt Rec/Send
ykuroda 3:d5353b68105f 3 //
ykuroda 3:d5353b68105f 4 // 2009.11.13 ... Originally written by Y.Kuroda for Renesas H83664
ykuroda 3:d5353b68105f 5 // 2012.08.31 ... Code convert for mbed in C++
ykuroda 3:d5353b68105f 6 //
ykuroda 3:d5353b68105f 7 #include "mbed.h"
ykuroda 3:d5353b68105f 8 #include "RingBuffer.h"
ykuroda 3:d5353b68105f 9 #include "iSerial.h"
ykuroda 3:d5353b68105f 10
ykuroda 3:d5353b68105f 11
ykuroda 3:d5353b68105f 12 /*
ykuroda 3:d5353b68105f 13 * Interrupt Function
ykuroda 3:d5353b68105f 14 */
ykuroda 3:d5353b68105f 15 void
ykuroda 3:d5353b68105f 16 iSerial::rx_handler(void)
ykuroda 3:d5353b68105f 17 {
ykuroda 3:d5353b68105f 18 if(Serial::readable()){
ykuroda 3:d5353b68105f 19 rxbuf.save(Serial::getc());
ykuroda 3:d5353b68105f 20 }
ykuroda 3:d5353b68105f 21
ykuroda 3:d5353b68105f 22 NVIC_EnableIRQ(UART_IRQn); // UART1_IRQn);
ykuroda 3:d5353b68105f 23 }
ykuroda 3:d5353b68105f 24
ykuroda 3:d5353b68105f 25 void
ykuroda 3:d5353b68105f 26 iSerial::tx_handler(void)
ykuroda 3:d5353b68105f 27 {
ykuroda 3:d5353b68105f 28 if(Serial::writeable()){
ykuroda 3:d5353b68105f 29 if(txbuf.check()){
ykuroda 3:d5353b68105f 30 Serial::putc( txbuf.read() );
ykuroda 3:d5353b68105f 31 }
ykuroda 3:d5353b68105f 32 }
ykuroda 3:d5353b68105f 33 NVIC_EnableIRQ(UART_IRQn); // UART1_IRQn);
ykuroda 3:d5353b68105f 34 }
ykuroda 3:d5353b68105f 35
ykuroda 3:d5353b68105f 36 /*
ykuroda 3:d5353b68105f 37 * void sci_init(void)
ykuroda 3:d5353b68105f 38 *
ykuroda 3:d5353b68105f 39 *@ƒ|[ƒg‰Šú‰»ŠÖ”DDDD‚·‚ׂĂÌI/O‚̐ݒè‚ðs‚Á‚Ä‚¢‚éD
ykuroda 3:d5353b68105f 40 *
ykuroda 3:d5353b68105f 41 *@@ˆø”F‚È‚µ
ykuroda 3:d5353b68105f 42 *@@–ß‚è’lF‚È‚µ
ykuroda 3:d5353b68105f 43 *
ykuroda 3:d5353b68105f 44 */
ykuroda 3:d5353b68105f 45 iSerial::iSerial(PinName _tx, PinName _rx, const char *_name, int _txbufsize, int _rxbufsize)
ykuroda 3:d5353b68105f 46 : Serial(_tx, _rx, _name),
ykuroda 3:d5353b68105f 47 txbuf(RingBuffer(_txbufsize)),
ykuroda 3:d5353b68105f 48 rxbuf(RingBuffer(_rxbufsize))
ykuroda 3:d5353b68105f 49 {
ykuroda 3:d5353b68105f 50 __disable_irq();
ykuroda 3:d5353b68105f 51
ykuroda 3:d5353b68105f 52 attach(this, &iSerial::tx_handler, Serial::TxIrq);
ykuroda 3:d5353b68105f 53 attach(this, &iSerial::rx_handler, Serial::RxIrq);
ykuroda 3:d5353b68105f 54
ykuroda 3:d5353b68105f 55 // format(8,Serial::None,1); // default
ykuroda 3:d5353b68105f 56 // baud(baudrate);
ykuroda 3:d5353b68105f 57
ykuroda 3:d5353b68105f 58 __enable_irq();
ykuroda 3:d5353b68105f 59 NVIC_EnableIRQ(UART_IRQn); // UART1_IRQn);
ykuroda 3:d5353b68105f 60 }
ykuroda 3:d5353b68105f 61
ykuroda 3:d5353b68105f 62 /*
ykuroda 3:d5353b68105f 63 * ƒVƒŠƒAƒ‹“ü—Í‚É•¶Žš‚ª‚ ‚é‚©‚Ç‚¤‚©ƒ`ƒFƒbƒN
ykuroda 3:d5353b68105f 64 * •Ô’lF ƒoƒbƒtƒ@‚É‚ ‚镶Žš”
ykuroda 3:d5353b68105f 65 */
ykuroda 3:d5353b68105f 66 int
ykuroda 3:d5353b68105f 67 iSerial::readable(void)
ykuroda 3:d5353b68105f 68 {
ykuroda 3:d5353b68105f 69 return rxbuf.check();
ykuroda 3:d5353b68105f 70 }
ykuroda 3:d5353b68105f 71
ykuroda 3:d5353b68105f 72 /*
ykuroda 3:d5353b68105f 73 * ƒVƒŠƒAƒ‹‚©‚çˆê•¶Žš“ü—Í
ykuroda 3:d5353b68105f 74 * --- •¶Žš“ü—Í‚ð‘Ò‚Â
ykuroda 3:d5353b68105f 75 */
ykuroda 3:d5353b68105f 76 int
ykuroda 3:d5353b68105f 77 iSerial::getc(void)
ykuroda 3:d5353b68105f 78 {
ykuroda 3:d5353b68105f 79 unsigned short int c;
ykuroda 3:d5353b68105f 80
ykuroda 3:d5353b68105f 81 while(!rxbuf.check());
ykuroda 3:d5353b68105f 82 c = rxbuf.read();
ykuroda 3:d5353b68105f 83
ykuroda 3:d5353b68105f 84 return c;
ykuroda 3:d5353b68105f 85 }
ykuroda 3:d5353b68105f 86
ykuroda 3:d5353b68105f 87
ykuroda 3:d5353b68105f 88 /*
ykuroda 3:d5353b68105f 89 *@ƒVƒŠƒAƒ‹‚ֈꕶŽšo—Í
ykuroda 3:d5353b68105f 90 */
ykuroda 3:d5353b68105f 91 void
ykuroda 3:d5353b68105f 92 iSerial::putc(short ch)
ykuroda 3:d5353b68105f 93 {
ykuroda 3:d5353b68105f 94 if(txbuf.check()==0 && Serial::writeable()){
ykuroda 3:d5353b68105f 95 Serial::putc(ch);
ykuroda 3:d5353b68105f 96
ykuroda 3:d5353b68105f 97 } else {
ykuroda 3:d5353b68105f 98 while(txbuf.full());
ykuroda 3:d5353b68105f 99 txbuf.save(ch);
ykuroda 3:d5353b68105f 100 NVIC_EnableIRQ(UART_IRQn); // UART1_IRQn);
ykuroda 3:d5353b68105f 101 }
ykuroda 3:d5353b68105f 102 }
ykuroda 3:d5353b68105f 103
ykuroda 3:d5353b68105f 104 /*
ykuroda 3:d5353b68105f 105 *@ƒVƒŠƒAƒ‹‚Ö•¶Žš—ñ‚ðo—Í
ykuroda 3:d5353b68105f 106 *@@’Fˆê‰ñ‚̍ő啶Žš”‚ÍLINESIZE
ykuroda 3:d5353b68105f 107 *@@’F•¶Žš—ñ‚̏I‚í‚è‚ɂ̓kƒ‹•¶Žš‚ª•K—vD
ykuroda 3:d5353b68105f 108 *
ykuroda 3:d5353b68105f 109 *@@ˆø”F•¶Žš—ñ‚ւ̃|ƒCƒ“ƒ^
ykuroda 3:d5353b68105f 110 *@@•Ô’lFo—Í‚µ‚½•¶Žš”
ykuroda 3:d5353b68105f 111 */
ykuroda 3:d5353b68105f 112 short int
ykuroda 3:d5353b68105f 113 iSerial::putstr(const char* s)
ykuroda 3:d5353b68105f 114 {
ykuroda 3:d5353b68105f 115 int i=0;
ykuroda 3:d5353b68105f 116 for(; ; i++){
ykuroda 3:d5353b68105f 117 if(*s==0) break;
ykuroda 3:d5353b68105f 118 putc(*s++);
ykuroda 3:d5353b68105f 119 }
ykuroda 3:d5353b68105f 120 return i;
ykuroda 3:d5353b68105f 121 }
ykuroda 3:d5353b68105f 122
ykuroda 3:d5353b68105f 123 /*@short int sci_puts(char* s)
ykuroda 3:d5353b68105f 124 *@ƒVƒŠƒAƒ‹‚Ö•¶Žš—ñ‚ðˆêso—Í
ykuroda 3:d5353b68105f 125 *@@’FÅŒã‚ɉüsƒR[ƒh‚𑗂鑼‚Ísci_putstr‚Æ“¯‚¶
ykuroda 3:d5353b68105f 126 *
ykuroda 3:d5353b68105f 127 *@@ˆø”F•¶Žš—ñ‚ւ̃|ƒCƒ“ƒ^
ykuroda 3:d5353b68105f 128 *@@•Ô’lFo—Í‚µ‚½•¶Žš”
ykuroda 3:d5353b68105f 129 */
ykuroda 3:d5353b68105f 130 short int
ykuroda 3:d5353b68105f 131 iSerial::puts(const char* s)
ykuroda 3:d5353b68105f 132 {
ykuroda 3:d5353b68105f 133 short int n = putstr(s);
ykuroda 3:d5353b68105f 134 putc(CR);
ykuroda 3:d5353b68105f 135 putc(LF);
ykuroda 3:d5353b68105f 136 return n;
ykuroda 3:d5353b68105f 137 }
ykuroda 3:d5353b68105f 138