Manchester Code Library
The mikroPascal PRO for ARM provides a library for handling Manchester coded signals. The Manchester code is a code in which data and clock signals are combined to form a single self-synchronizing data stream; each encoded bit contains a transition at the midpoint of a bit period, the direction of transition determines whether the bit is 0 or 1; the second half is the true bit value and the first half is the complement of the true bit value (as shown in the figure below).
- The Manchester receive routines are blocking calls (
Man_Receive_Init
andMan_Synchro
). This means that MCU will wait until the task has been performed (e.g. byte is received, synchronization achieved, etc). - Manchester code library implements time-based activities, so interrupts need to be disabled when using it.
External dependencies of Manchester Code Library
Stellaris
The following variables must be defined in all projects using Manchester Code Library: | Description: | Example: |
---|---|---|
var MANRXPIN : sbit; sfr; external; |
Receive line. | var MANRXPIN : sbit at GPIO_PORTE_DATA.B0; |
var MANTXPIN : sbit; sfr; external; |
Transmit line. | var MANTXPIN : sbit at GPIO_PORTE_DATA.B1; |
var MANRXPIN_Direction : sbit; sfr; external; |
Direction of the Receive pin. | var MANRXPIN_Direction : sbit at GPIO_PORTE_DIR.B0; |
var MANTXPIN_Direction : sbit; sfr; external; |
Direction of the Transmit pin. | var MANTXPIN_Direction : sbit at GPIO_PORTE_DIR.B1; |
MSP432
The following variables must be defined in all projects using Manchester Code Library: | Description: | Example: |
---|---|---|
var MANRXPIN : sbit; sfr; external; |
Receive line. | var MANRXPIN : sbit at DIO_P6IN.B0; |
var MANTXPIN : sbit; sfr; external; |
Transmit line. | var MANTXPIN : sbit at DIO_P6OUT.B1; |
var MANRXPIN_Direction : sbit; sfr; external; |
Direction of the Receive pin. | var MANRXPIN_Direction : sbit at DIO_P6DIR.B0; |
var MANTXPIN_Direction : sbit; sfr; external; |
Direction of the Transmit pin. | var MANTXPIN_Direction : sbit at DIO_P6DIR.B1; |
STM32
The following variables must be defined in all projects using Manchester Code Library: | Description: | Example: |
---|---|---|
var MANRXPIN : sbit; sfr; external; |
Receive line. | var MANRXPIN : sbit at GPIOE_IDR.B8; |
var MANTXPIN : sbit; sfr; external; |
Transmit line. | var MANTXPIN : sbit at GPIOE_ODR.B9; |
CEC1x02
The following variables must be defined in all projects using Manchester Code Library: | Description: | Example: |
---|---|---|
var MANRXPIN : sbit; sfr; external; |
Receive line. | var MANRXPIN : sbit at GPIO_INPUT_PIN_023_bit; |
var MANTXPIN : sbit; sfr; external; |
Transmit line. | var MANTXPIN : sbit at GPIO_OUTPUT_PIN_023_bit; |
Library Routines
The following routines are for the internal use by compiler only:
- Manchester_0
- Manchester_1
- Manchester_Out
Man_Receive_Init
Prototype |
function Man_Receive_Init() : word; |
---|---|
Description |
The function configures Receiver pin. After that, the function performs synchronization procedure in order to retrieve baud rate out of the incoming signal. |
Parameters |
None. |
Returns |
|
Requires |
External dependencies of the library from the top of the page must be defined before using this function. |
Example |
Stellaris// Manchester module connections var MANRXPIN : sbit at GPIO_PORTE_DATA.B0; MANRXPIN_Direction : sbit at GPIO_PORTE_DIR.B0; MANTXPIN : sbit at GPIO_PORTE_DATA.B1; MANTXPIN_Direction : sbit at GPIO_PORTE_DIR.B1; // End Manchester module connections ... Man_Receive_Init(); MSP432// Manchester module connections var MANRXPIN : sbit at DIO_P6IN.B0; MANRXPIN_Direction : sbit at DIO_P6DIR.B0; MANTXPIN : sbit at DIO_P6OUT.B1; MANTXPIN_Direction : sbit at DIO_P6DIR.B1; // End Manchester module connections ... Man_Receive_Init(); STM32// Manchester module connections var MANRXPIN: sbit at GPIOE_IDR.B8; var MANTXPIN: sbit at GPIOE_ODR.B9; // End Manchester module connections ... Man_Receive_Init(); CEC1x02// Manchester module connections var MANRXPIN: sbit at GPIO_INPUT_PIN_023_bit; var MANTXPIN: sbit at GPIO_OUTPUT_PIN_023_bit; // End Manchester module connections ... Man_Receive_Init(); |
Notes |
In case of multiple persistent errors on reception, the user should call this routine once again or Man_Synchro routine to enable synchronization. |
Man_Receive
Prototype |
function Man_Receive(var error : word) : byte; |
---|---|
Description |
The function extracts one byte from incoming signal. |
Parameters |
|
Returns |
A byte read from the incoming signal. |
Requires |
To use this function, the user must prepare the MCU for receiving. See Man_Receive_Init routines. |
Example |
var data_, error : word; ... error := 0; data_ := 0; data_ := Man_Receive(error); if (error <> 0) then begin // error handling end; |
Notes |
None. |
Man_Send_Init
Prototype |
procedure Man_Send_Init(); |
---|---|
Description |
The function configures Transmitter pin. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
External dependencies of the library from the top of the page must be defined before using this function. |
Example |
Stellaris// Manchester module connections var MANRXPIN : sbit at GPIO_PORTE_DATA.B0; MANRXPIN_Direction : sbit at GPIO_PORTE_DIR.B0; MANTXPIN : sbit at GPIO_PORTE_DATA.B1; MANTXPIN_Direction : sbit at GPIO_PORTE_DIR.B1; // End Manchester module connections ... Man_Send_Init(); MSP432// Manchester module connections var MANRXPIN : sbit at DIO_P6IN.B0; MANRXPIN_Direction : sbit at DIO_P6DIR.B0; MANTXPIN : sbit at DIO_P6OUT.B1; MANTXPIN_Direction : sbit at DIO_P6DIR.B1; // End Manchester module connections ... Man_Send_Init(); STM32// Manchester module connections var MANRXPIN: sbit at GPIOE_IDR.B8; var MANTXPIN: sbit at GPIOE_ODR.B9; // End Manchester module connections ... Man_Send_Init(); CEC1x02// Manchester module connections var MANRXPIN: sbit at GPIO_INPUT_PIN_023_bit; var MANTXPIN: sbit at GPIO_OUTPUT_PIN_023_bit; // End Manchester module connections ... Man_Send_Init(); |
Notes |
None. |
Man_Send
Prototype |
procedure Man_Send(tr_data : byte); |
---|---|
Description |
Sends one byte. |
Parameters |
|
Returns |
Nothing. |
Requires |
To use this function, the user must prepare the MCU for sending. See Man_Send_Init routine. |
Example |
var msg : byte; ... Man_Send(msg); |
Notes |
Baud rate used is 500 bps. |
Man_Synchro
Prototype |
function Man_Synchro(): word; |
---|---|
Description |
Measures half of the manchester bit length with 10us resolution. |
Parameters |
None. |
Returns |
|
Requires |
To use this function, you must first prepare the MCU for receiving. See Man_Receive_Init. |
Example |
var man__half_bit_len : word; ... man__half_bit_len := Man_Synchro(); |
Notes |
None. |
Man_Break
Prototype |
procedure Man_Break(); |
---|---|
Description |
Man_Receive is blocking routine and it can block the program flow. Call this routine from interrupt to unblock the program execution. This mechanism is similar to WDT. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
Nothing. |
Example |
|
Notes |
Interrupts should be disabled before using Manchester routines again (see note at the top of this page). |