Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Serial485.cpp@0:b3faf92ccc5c, 2014-06-30 (annotated)
- Committer:
- piyamate
- Date:
- Mon Jun 30 18:34:25 2014 +0000
- Revision:
- 0:b3faf92ccc5c
RS485 Library for K64F; - RTS pin for DE/RE; - 9-bit mode
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
piyamate | 0:b3faf92ccc5c | 1 | #include "mbed.h" |
piyamate | 0:b3faf92ccc5c | 2 | #include "Serial485.h" |
piyamate | 0:b3faf92ccc5c | 3 | #include "fsl_uart_hal.h" |
piyamate | 0:b3faf92ccc5c | 4 | |
piyamate | 0:b3faf92ccc5c | 5 | const PinMap Serial485::PinMap_UART_RTS[] = { |
piyamate | 0:b3faf92ccc5c | 6 | {PTE3 , UART_1, 3}, |
piyamate | 0:b3faf92ccc5c | 7 | {PTA3 , UART_0, 2}, |
piyamate | 0:b3faf92ccc5c | 8 | {PTA17, UART_0, 3}, |
piyamate | 0:b3faf92ccc5c | 9 | {PTB2 , UART_0, 3}, |
piyamate | 0:b3faf92ccc5c | 10 | {PTC1 , UART_1, 3}, |
piyamate | 0:b3faf92ccc5c | 11 | {PTC12, UART_4, 3}, |
piyamate | 0:b3faf92ccc5c | 12 | {PTC18, UART_3, 3}, |
piyamate | 0:b3faf92ccc5c | 13 | {PTD0 , UART_2, 3}, |
piyamate | 0:b3faf92ccc5c | 14 | {PTD4 , UART_0, 3}, |
piyamate | 0:b3faf92ccc5c | 15 | {NC , NC , 0} |
piyamate | 0:b3faf92ccc5c | 16 | }; |
piyamate | 0:b3faf92ccc5c | 17 | |
piyamate | 0:b3faf92ccc5c | 18 | Serial485::Serial485(PinName tx, PinName rx, PinName rts): |
piyamate | 0:b3faf92ccc5c | 19 | RawSerial(tx, rx), |
piyamate | 0:b3faf92ccc5c | 20 | rts(rts) |
piyamate | 0:b3faf92ccc5c | 21 | { |
piyamate | 0:b3faf92ccc5c | 22 | if(rts != NC) |
piyamate | 0:b3faf92ccc5c | 23 | { |
piyamate | 0:b3faf92ccc5c | 24 | //find UART peripheral number |
piyamate | 0:b3faf92ccc5c | 25 | uint32_t uart_rts = pinmap_peripheral(rts, PinMap_UART_RTS); |
piyamate | 0:b3faf92ccc5c | 26 | if(uart_rts == (uint32_t)NC) |
piyamate | 0:b3faf92ccc5c | 27 | error("pinmap not found for peripheral"); |
piyamate | 0:b3faf92ccc5c | 28 | else |
piyamate | 0:b3faf92ccc5c | 29 | { |
piyamate | 0:b3faf92ccc5c | 30 | uart_instance = uart_rts; |
piyamate | 0:b3faf92ccc5c | 31 | enableRS485(); |
piyamate | 0:b3faf92ccc5c | 32 | } |
piyamate | 0:b3faf92ccc5c | 33 | } |
piyamate | 0:b3faf92ccc5c | 34 | } |
piyamate | 0:b3faf92ccc5c | 35 | |
piyamate | 0:b3faf92ccc5c | 36 | Serial485::~Serial485() |
piyamate | 0:b3faf92ccc5c | 37 | { |
piyamate | 0:b3faf92ccc5c | 38 | if(rts != NC) |
piyamate | 0:b3faf92ccc5c | 39 | disableRS485(); |
piyamate | 0:b3faf92ccc5c | 40 | } |
piyamate | 0:b3faf92ccc5c | 41 | |
piyamate | 0:b3faf92ccc5c | 42 | void Serial485::enableRS485() |
piyamate | 0:b3faf92ccc5c | 43 | { |
piyamate | 0:b3faf92ccc5c | 44 | uart_hal_configure_transmitter_rts_polarity(uart_instance, 1); |
piyamate | 0:b3faf92ccc5c | 45 | uart_hal_enable_transmitter_rts(uart_instance); |
piyamate | 0:b3faf92ccc5c | 46 | pinmap_pinout(rts, PinMap_UART_RTS); |
piyamate | 0:b3faf92ccc5c | 47 | pin_mode(rts, PullDown); |
piyamate | 0:b3faf92ccc5c | 48 | } |
piyamate | 0:b3faf92ccc5c | 49 | |
piyamate | 0:b3faf92ccc5c | 50 | void Serial485::disableRS485() |
piyamate | 0:b3faf92ccc5c | 51 | { |
piyamate | 0:b3faf92ccc5c | 52 | uart_hal_disable_transmitter_rts(uart_instance); |
piyamate | 0:b3faf92ccc5c | 53 | pin_function(rts, 0); |
piyamate | 0:b3faf92ccc5c | 54 | pin_mode(rts, PullUp); |
piyamate | 0:b3faf92ccc5c | 55 | } |
piyamate | 0:b3faf92ccc5c | 56 | |
piyamate | 0:b3faf92ccc5c | 57 | void Serial485::set9thBit(uint8_t value) |
piyamate | 0:b3faf92ccc5c | 58 | { |
piyamate | 0:b3faf92ccc5c | 59 | BW_UART_C3_T8(uart_instance, value); |
piyamate | 0:b3faf92ccc5c | 60 | } |
piyamate | 0:b3faf92ccc5c | 61 | |
piyamate | 0:b3faf92ccc5c | 62 | void Serial485::puts9(const uint16_t *data, uint16_t count) |
piyamate | 0:b3faf92ccc5c | 63 | { |
piyamate | 0:b3faf92ccc5c | 64 | while(count-- > 0) |
piyamate | 0:b3faf92ccc5c | 65 | { |
piyamate | 0:b3faf92ccc5c | 66 | while(!writeable()); |
piyamate | 0:b3faf92ccc5c | 67 | putc9(*data++); |
piyamate | 0:b3faf92ccc5c | 68 | } |
piyamate | 0:b3faf92ccc5c | 69 | } |
piyamate | 0:b3faf92ccc5c | 70 | |
piyamate | 0:b3faf92ccc5c | 71 | void Serial485::putc9(uint16_t data) |
piyamate | 0:b3faf92ccc5c | 72 | { |
piyamate | 0:b3faf92ccc5c | 73 | uart_hal_putchar9(uart_instance, data); |
piyamate | 0:b3faf92ccc5c | 74 | } |
piyamate | 0:b3faf92ccc5c | 75 | |
piyamate | 0:b3faf92ccc5c | 76 | uint16_t Serial485::getc9() |
piyamate | 0:b3faf92ccc5c | 77 | { |
piyamate | 0:b3faf92ccc5c | 78 | uint16_t data; |
piyamate | 0:b3faf92ccc5c | 79 | while(!readable()); |
piyamate | 0:b3faf92ccc5c | 80 | uart_hal_getchar9(uart_instance, &data); |
piyamate | 0:b3faf92ccc5c | 81 | return data; |
piyamate | 0:b3faf92ccc5c | 82 | } |
piyamate | 0:b3faf92ccc5c | 83 | |
piyamate | 0:b3faf92ccc5c | 84 | uint32_t Serial485::getBaudRate() |
piyamate | 0:b3faf92ccc5c | 85 | { |
piyamate | 0:b3faf92ccc5c | 86 | return _baud; |
piyamate | 0:b3faf92ccc5c | 87 | } |