\n",
size, strHif.u16Length, strHif.u8Gid, strHif.u8Opcode);
nm_bsp_interrupt_ctrl(1);
ret = M2M_ERR_BUS_FAIL;
goto ERR1;
}
}
/* RX STEP (5) */
if(M2M_REQ_GRP_WIFI == strHif.u8Gid)
{
if(pfWifiCb)
{
pfWifiCb(strHif.u8Opcode,strHif.u16Length - M2M_HIF_HDR_OFFSET,
address + M2M_HIF_HDR_OFFSET);
}
}
else if(M2M_REQ_GRP_IP == strHif.u8Gid)
{
if(pfIpCb)
{
pfIpCb(strHif.u8Opcode,strHif.u16Length - M2M_HIF_HDR_OFFSET,
address + M2M_HIF_HDR_OFFSET);
}
}
else if(M2M_REQ_GRP_OTA == strHif.u8Gid)
{
if(pfOtaCb)
{
pfOtaCb(strHif.u8Opcode,strHif.u16Length - M2M_HIF_HDR_OFFSET,
address + M2M_HIF_HDR_OFFSET);
}
}
else
{
M2M_ERR("(hif) invalid group ID\n");
ret = M2M_ERR_BUS_FAIL;
goto ERR1;
}
/* RX STEP (6) */
if(!gu8HifSizeDone)
{
M2M_ERR("(hif) host app didn't set RX Done\n");
ret = hif_set_rx_done();
}
}
else
{
ret = M2M_ERR_RCV;
M2M_ERR("(hif) Wrong Size\n");
goto ERR1;
}
}
else
ATWINC15x0
Host Interface (HIF) Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 88
{
#ifndef WIN32
M2M_ERR("(hif) False interrupt %lx",reg);
#endif
}
}
else
{
M2M_ERR("(hif) Fail to Read interrupt reg\n");
goto ERR1;
}
}
else
{
M2M_ERR("(hif) FAIL to wakeup the chip\n");
goto ERR1;
}
/* RX STEP (7) */
ret = hif_chip_sleep();
ERR1:
return ret;
}
• The appropriate handler in the Wi-Fi layer (called from the HIF layer).
static void m2m_wifi_cb(uint8 u8OpCode, uint16 u16DataSize, uint32 u32Addr)
{ // …code eliminated…
else if (u8OpCode == M2M_WIFI_RESP_SCAN_DONE)
{
tstrM2mScanDone strState;
gu8scanInProgress = 0;
if(hif_receive(u32Addr, (uint8*)&strState, sizeof(tstrM2mScanDone), 0) == M2M_SUCCESS)
{
gu8ChNum = strState.u8NumofCh;
if (gpfAppWifiCb)
gpfAppWifiCb(M2M_WIFI_RESP_SCAN_DONE, &strState);
}
}
// …code eliminated…
}
• The Wi-Fi layer sends the response to the application through its callback function.
if (u8MsgType == M2M_WIFI_RESP_SCAN_DONE)
{
tstrM2mScanDone *pstrInfo = (tstrM2mScanDone*) pvMsg;
if( (gu8IsWiFiConnected == M2M_WIFI_DISCONNECTED) &&
(gu8WPS == WPS_DISABLED) && (gu8Prov == PROV_DISABLED) )
{
gu8Index = 0;
gu8Sleep = PS_WAKE;
if (pstrInfo->u8NumofCh >= 1)
{
m2m_wifi_req_scan_result(gu8Index);
gu8Index++;
}
else
{
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
}
}
}
ATWINC15x0
Host Interface (HIF) Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 89
14. WINC SPI Protocol
The WINC main interface is SPI. The WINC device employs a protocol to allow exchange of formatted
binary messages between the WINC firmware and the host MCU application. The WINC protocol uses
raw bytes exchanged on the SPI bus to form high level structures like requests and callbacks.
The WINC SPI protocol consists of three layers:
• Layer 1 – the WINC SPI Slave protocol, which allows the host MCU application to perform register/
memory read and write operation in the ATWINC15x0 device using raw SPI data exchange.
• Layer 2 – the host MCU application uses the register and memory read and write capabilities to
exchange the host interface frames with the WINC firmware. It also provides asynchronous
callback from the WINC firmware to the host MCU through interrupts and the host interface RX
frames. For more information on this layer, refer to Section 15 “Host Interface (HIF) Protocol”.
• Layer 3 – allows the host MCU application to exchange high level messages (for example, Wi-Fi
scan, socket connection, or TCP data received) with the WINC firmware to employ in the host MCU
application logic.
Figure 14-1. WINC SPI Protocol Layers
14.1 Introduction
The WINC SPI Protocol is implemented as a command-response transaction and assumes one party is
the Master and the other is the Slave. The roles correspond to the Master and Slave devices on the SPI
bus. Each message has an identifier in the first byte indicating the type of message:
• Command
• Response
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 90
• Data
In the case of Command and Data messages, the last byte is used as data integrity check.
The format of Command and Response and Data frames are described in the following sections. The
following points apply:
• There is a response for each command.
• Transmitted/received data is divided into packets with fixed size.
• For a WR transaction (Slave is receiving data packets), the Slave sends a response for each data
packet.
• For a RD transaction (Master is receiving data packets), the Master does not send a response. If
there is an error, the Master requests a retransmission on the lost data packet.
• Protection of commands and data packets by CRC is optional.
14.1.1 Command Format
The following frame format is used for commands where the host supports a DMA address of three bytes.
The first byte contains two fields:
• The CMD/Data Start field indicates that this is a Command frame.
• The CMD type field specifies the command to be executed.
The CMD type may be one of 15 commands:
• DMA write
• DMA read
• Internal register write
• Internal register read
• Transaction termination
• Repeat data packet
• DMA extended write
• DMA extended read
• DMA single-word write
• DMA single-word read
• Soft Reset
The Payload field contains command specific data and its length depends on the CMD type.
The CRC field is optional and generally computed in software.
The Payload field can be one of four types each having a different length:
• A: Three bytes
• B: Five bytes
• C: Six bytes
• D: Seven bytes
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 91
Type A commands include:
• DMA single-word RD
• internal register RD
• Transaction termination command
• Repeat data PKT command
• Soft Reset command
Type B commands include:
• DMA RD Transaction
• DMA WR Transaction
Type C commands include:
• DMA Extended RD transaction
• DMA Extended WR transaction
• Internal register WR
Type D commands include:
• DMA single-word WR
Full details of the frame format fields are provided in the following table:
Table 14-1. Frame Format Fields
Field Size Description
CMD Start 4 bits Command Start: 4’b1100
CMD Type 4 bits Command type:
4’b0001: DMA write transaction
4’b0010: DMA read transaction
4’b0011: Internal register write
4’b0100: Internal register read
4’b0101: Transaction termination
4’b0110: Repeat data Packet
command
4’b0111: DMA extended write
transaction
4’b1000: DMA extended read
transaction
4’b1001: DMA single-word write
4’b1010: DMA single-word read
4’b1111: Soft Reset command
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 92
...........continued
Field Size Description
Payload A: 3 The Payload field may be of Type
A, B, C, or D
Type A (length 3)
1- DMA single-word RD
Param: Read Address:
Payload bytes:
B0: ADDRESS[23:16]
B1: ADDRESS[15:8]
B2: ADDRESS[7:0]
2- internal register RD
Param: Offset address (two
bytes):
Payload bytes:
B0: OFFSET-ADDR[15:8]
B1: OFFSET-ADDR[7:0]
B2: 0
3- Transaction termination
command
Param: none
Payload bytes:
B0: 0
B1: 0
B2: 0
4- Repeat Data PKT command
Param: none
Payload bytes:
B0: 0
B1: 0
B2: 0
5- Soft Reset command
Param: none
Payload bytes:
B0: 0xFF
B1: 0xFF
B2: 0xFF
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 93
...........continued
Field Size Description
Payload B: 5 Type B (length 5)
1- DMA RD Transaction
Params:
DMA Start Address: 3 bytes
DMA count: 2 bytes
Payload bytes:
B0: ADDRESS[23:16]
B1: ADDRESS[15:8]
B2: ADDRESS[7:0]
B3: COUNT[15:8]
B4: COUNT[7:0]
2- DMA WR Transaction
Params:
DMA Start Address: 3 bytes
DMA count: 2 bytes
Payload bytes:
B0: ADDRESS[23:16]
B1: ADDRESS[15:8]
B2: ADDRESS[7:0]
B3: COUNT[15:8]
B4: COUNT[7:0]
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 94
...........continued
Field Size Description
Payload C: 6 Type C (length 6)
1- DMA Extended RD
transaction
Params:
DMA Start Address: 3 bytes
DMA extended count: 3 bytes
Payload bytes:
B0: ADDRESS[23:16]
B1: ADDRESS[15:8]
B2: ADDRESS[7:0]
B3: COUNT[23:16]
B4: COUNT[15:8]
B5: COUNT[7:0]
2- DMA Extended WR
transaction
Params:
DMA Start Address: 3 bytes
DMA extended count: 3 bytes
Payload bytes:
B0: ADDRESS[23:16]
B1: ADDRESS[15:8]
B2: ADDRESS[7:0]
B3: COUNT[23:16]
B4: COUNT[15:8]
B5: COUNT[7:0]
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 95
...........continued
Field Size Description
Payload C: 6 3- Internal register WR*
Params:
Offset address: 3 bytes
Write data: 3 bytes
* “clocked or clockless registers”
Payload bytes:
B0: OFFSET-ADDR[15:8]
B1: OFFSET-ADDR [7:0]
B2: DATA[31:24]
B3: DATA [23:16]
B4: DATA [15:8]
B5: DATA [7:0]
Payload D: 7 Type D (length 7)
1- DMA single-word WR
Params:
Address: 3 bytes
DMA Data: 4 bytes
Payload bytes:
B0: ADDRESS[23:16]
B1: ADDRESS[15:8]
B2: ADDRESS[7:0]
B3: DATA[31:24]
B4: DATA [23:16]
B5: DATA [15:8]
B6: DATA [7:0]
CRC7 1 byte Optional data integrity field
comprising two subfields:
bit 0: fixed value ‘1’
bits 1-7: 7 bit CRC value
computed using polynomial G(x)
= X^7 + X^3 + 1 with seed value:
0x7F
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 96
The following table summarizes the different commands according to the payload type (DMA address = 3
bytes):
Table 14-2. Commands in Payload
Payload Type Payload Size Command Packet Size with CRC Commands
Type A 3 bytes 5 bytes 1- DMA Single-Word Read
2- Internal Register Read
3- Transaction Termination
4- Repeat Data Packet
5- Soft Reset
Type B 5 bytes 7 bytes 1- DMA Read
2- DMA Write
Type C 6 bytes 8 bytes 1- DMA Extended Read
2- DMA Extended Write
3- Internal Register Write
Type D 7 bytes 9 bytes 1- DMA Single-Word Write
14.1.2 Response Format
The following frame format is used for responses sent by the WINC device as the result of receiving a
Command or certain Data frames. The Response message has a fixed length of two bytes.
The first byte contains two fields of four bits each to identify the response message and the response
type.
The second byte indicates the status of the WINC after receiving and, where possible, executing the
command/data. This byte contains two sub fields:
• B0-B3: Error state
• B4-B7: DMA state
States that may be indicated are:
• DMA state:
– DMA ready for any transaction
– DMA engine is busy
• Error state:
– No error
– Unsupported command
– Receiving unexpected data packet
– Command CRC7 error
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 97
Table 14-3. Response Format
Field Size Description
Response Start 4 bits Response Start : 4’b1100
Response Type 4 bits If the response packet is for Command:
• Contains of copy of the Command Type field in the Command.
If the response packet is for received Data Packet:
• 4’b0001: first data packet is received
• 4’b0010: Receiving data packets
• 4’b0011: last data packet is received
• 4’b1111: Reserved value
State 1 byte This field is divided into two subfields:
DMA State :
• 4’b0000: DMA ready for any transaction
• 4’b0001: DMA engine is busy
Error State:
• 4’b0000: No error
• 4’b0001: Unsupported command
• 4’b0010: Receiving unexpected data packet
• 4’b0011: Command CRC7 error
• 4’b0100: Data CRC16 error
• 4’b0101: Internal general error
14.1.3 Data Packet Format
The Data Packet Format is used in either direction (Master to Slave or Slave to Master) to transfer
opaque data. A command frame is used either to inform the Slave that a data packet is about to be sent
or to request the Slave to send a data packet to the Master. In the case of Master to Slave, the Slave
sends a response after the command and each subsequent data frame. The format of a data packet is
shown below.
To support DMA hardware, a large data transfer may be fragmented into multiple smaller Data Packets.
This is controlled by the value of DATA_PACKET_SIZE which is agreed between the Master and the
Slave in software and is a fixed value such as 256B, 512B, 1KB (default), 2KB, 4KB, or 8KB. If a transfer
has a length of m, which exceeds DATA_PACKET_SIZE, the sender must split it into multiple
DATA_PACKET_SIZE as shown in Equation 1:
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 98
(m – (n-1)* DATA_PACKET_SIZE) -------------------------- Equation 1
Where,
1.. n-1 = length of the DATA_PACKET_SIZE
n = frame length
This is illustrated below.
• If DMA count <= DATA_PACKET_SIZE:
The data packet is “DATA_Header + DMA count +optional CRC16“, that is no padding.
• If DMA count > DATA_PACKET_SIZE:
• If remaining data < DATA_PACKET_SIZE, the last data packet is:
“DATA_Header + remaining data + optional CRC16 “, that is no padding.
The frame fields are described in detail in the following table:
Table 14-4. Frame Field
Field Size Description
Data Start 4 bits 4’b1111 (Default)
(Can be changed to any value by programming
DATA_START_CTRL register)
Packet
Order
4 bits 4’b0001: First packet in this transaction
4’b0010: Neither the first or the last packet in this transaction
4’b0011: Last packet in this transaction
4’b1111: Reserved
Data bytes DATA_PACKET_SIZE User data
CRC16 2 bytes Optional data integrity field comprising a 16-bit CRC value
encoded in two bytes. The most significant 8 bits are transmitted
first in the frame.
The CRC16 value is computed on data bytes only based on the
polynomial:
G(x) = X^16 + X^12 + X^5 + 1, seed value: 0xFFFF
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 99
14.1.4 Error Recovery Mechanism
Table 14-5. Error Recovery Mechanism
Error Type Recovery Mechanism
Master
CRC error in
command
1. Error response received from Slave.
2. Retransmit the command.
CRC error in received
data
1. Issue a repeat command for the data packet that has a CRC error.
2. Slave sends a response to the previous command.
3. Slave keeps the start DMA address of the previous data packet, so it can
retransmit it.
4. Receive the data packet again.
No response is
received from Slave
• Synchronization is lost between the Master and Slave.
• The worst case is when Slave is in receiving data state.
• Solution: The Master must wait for max DATA_PACKET_SIZE period
then generate a Soft Reset command.
Unexpected response Retransmit the command.
TX/RX Data count
error
Retransmit the command.
No response to Soft
Reset command
• Transmit all ones until Master receives a response of all ones from the
Slave.
• Then deactivate the output data line.
Slave
Unsupported
command
• Send response with error.
• Returns to command monitor state.
Receive command
CRC error
• Send response with error.
• Wait for command retransmission.
Received data CRC
error
• Send response with error.
• Wait for retransmission of the data packet.
Internal general error • The Master must do a Soft Reset on the Slave.
TX/RX Data count
error
• Only the Master can detect this error.
• Slave operates with the data count received until the count finishes or the
Master terminates the transaction.
• In both cases, the Master can retry the command from the start.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 100
...........continued
Error Type Recovery Mechanism
No response to Soft
Reset command
1. First received 4’b1001, it decides data start.
2. Then received packet order 4’b1111 that is reserved value.
3. Then monitors for 7 bytes all ones to decide Soft Reset action.
4. The Slave must activate the output data line.
5. Waits for deactivation for the received line.
6. The Slave then deactivates the output data line and returns to the CMD/
DATA start monitor state.
General Notes • The Slave must monitor the received line for command reception at any
time.
• When a CMD start is detected, the Slave receives 8 bytes then return
again to the command reception state.
• When the Slave is transmitting data, it must also monitor for command
reception.
• When the Slave is receiving data, it monitors for command reception
between the data packets.
• Issuing a Soft Reset command is detected in all cases.
14.1.5 Clockless Registers Access
Clockless register access allows a host device to access registers on the WINC device while it is held in a
reset state. This type of access can only be done using the “internal register read” and “internal register
write” commands. For clockless access, bit 15 of the Offset_addr in the command must be ‘1’ to
differentiate between the Clockless and Clocked access mode.
For Clockless register write: - the protocol Master must wait for the response as shown here:
For Clockless register read: - according to the interface, the protocol Slave may not send CRC16. One or
two byte padding depends on three or four byte DMA addresses.
14.2 Message Flow for Basic Transactions
This section shows the essential message exchanges and timings associated with the following
commands:
• Read Single Word
• Read Internal Register (clockless)
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 101
• Read Block
• Write Single Word
• Write Internal Register (clockless)
• Write Bock
14.2.1 Read Single Word
14.2.2 Read Internal Register (for clockless registers)
14.2.3 Read Block
Normal transaction:
Master - issues a DMA read transaction and waits for a response.
Slave - sends a response after CMD_RES_PERIOD.
Master - waits for a data packet start.
Slave - sends the data packets, separated by DATA_DATA_PERIOD[1] where DATA_DATA_PERIOD is
controlled by software and has one of these values: NO_DELAY (default), 4_BYTE_PERIOD,
8_BYTE_PERIOD, and 16_BYTE_PERIOD.
Slave - continues sending until the count ends.
Master - receives data packets. No response is sent for data packets but a termination/retransmit
command may be sent if there is an error.
The message sequence for this case is shown below:
Termination command is issued:
Master - can issue a termination command at any time during the transaction.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 102
Master - monitors for RES_START after CMD_RESP_PERIOD.
Slave - cuts off the current running data packet if there is any.
Slave - responds to the termination command after CMD_RESP_PERIOD from the end of the
termination command packet.
Repeat command is issued:
1. Master - can issue a repeat command at any time during the transaction.
2. Master - monitors for RES_START after CMD_RESP_PERIOD.
3. Slave - cuts off the current running data packet, if any.
4. Slave - responds to the repeat command after CMD_RESP_PERIOD from the end of the repeat
command packet.
5. Slave - sends the data packet again that has an error then continues the transaction as normal.
[1] The period between the data packets is “DATA_DATA_PERIOD + DMA access time.” The Master
monitors for DATA_START directly after DATA_DATA_PERIOD.
14.2.4 Write Single Word
1. Master - issues DMA single-word write command, including the data.
2. Slave - takes the data and sends a command response.
14.2.5 Write Internal Register (for clockless registers)
1. Master - issues an internal register write command, including the data.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 103
2. Slave - takes the data and sends a command response.
14.2.6 Write Block
• Case 1: Master waits for a command response:
1.1. Master - issues a DMA write command and waits for a response.
1.2. Slave - sends response after CMD_RES_PERIOD.
1.3. Master - sends the data packets after receiving response.
1.4. Slave - sends a response packet for each data packet received after
DATA_RES_PERIOD.
1.5. Master - does not wait for the data response before sending the following data packet
notes:
CMD_RES_PERIOD is controlled by SW taking one of the values:
NO_DELAY (default), 1_BYTE_PERIOD, 2_BYTE_PERIOD and 3_BYTE_PERIOD
The Master must monitor for RES_START after CMD_RES_PERIOD
DATA_RES_PERIOD is controlled by SW taking one of the values:
NO_DELAY (default), 1_BYTE_PERIOD, 2_BYTE_PERIOD and 3_BYTE_PERIOD
• Case 2: Master does not wait for a command response:
2.1. Master - sends the data packets directly after the command but it still monitors for a
command response after CMD_RESP_PERIOD.
2.2. Master - retransmits the data packets if there is an error in the command.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 104
14.3 SPI Level Protocol Example
To illustrate how the WINC SPI protocol works, the SPI bytes from the scan request example are dumped
and the sequence is described below.
14.3.1 TX (Send Request)
1. First step in hif_send() API is to wake up the chip.
sint8 nm_clkless_wake(void)
{
ret = nm_read_reg_with_ret(0x1, ®);
/* Set bit 1 */
ret = nm_write_reg(0x1, reg | (1 << 1));
// Check the clock status
ret = nm_read_reg_with_ret(clk_status_reg_adr, &clk_status_reg);
// Tell Firmware that Host waked up the chip
ret = nm_write_reg(WAKE_REG, WAKE_VALUE);
return ret;
}
Command CMD_INTERNAL_READ: 0xC4 /* internal register read */
BYTE [0] = CMD_INTERNAL_READ
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = 0x00;
2. The WINC acknowledges the command by sending three bytes [C4] [0] [F3].
3. The WINC chip sends the value of the register 0x01 which equals 0x01.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 105
Command CMD_INTERNAL_WRITE: C3 /* internal register write */
BYTE [0] = CMD_INTERNAL_WRITE
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = u32data >> 24; /* Data = 0x03 */
BYTE [4] = u32data >> 16;
BYTE [5] = u32data >> 8;
BYTE [6] = u32data;
4. The WINC acknowledges the command by sending two bytes [C3] [0].
Command CMD_INTERNAL_READ: 0xC4 /* internal register read */
BYTE [0] = CMD_INTERNAL_READ
BYTE [1] = address >> 8; /* address = 0x0F */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = 0x00;
5. The WINC acknowledges the command by sending three bytes [C4] [0] [F3].
6. The WINC chip sends the value of the register 0x01 which equals 0x07.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 106
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WAKE_REG address = 0x1074 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* WAKE_VALUE Data = 0x5678 */
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
7. The chip acknowledges the command by sending two bytes [C9] [0].
8. At this point, HIF finishes executing the clockless wake up of the WINC chip.
9. The HIF layer prepares and sets the HIF layer header to NMI_STATE_REG register (4 byte or 8
byte header describing the packet to be sent).
10. Set bit '1' of WIFI_HOST_RCV_CTRL_2 register to raise an interrupt to the chip.
sint8 hif_send(uint8 u8Gid,uint8 u8Opcode,uint8 *pu8CtrlBuf,uint16 u16CtrlBufSize,
uint8 *pu8DataBuf,uint16 u16DataSize, uint16 u16DataOffset)
{
volatile tstrHifHdr strHif;
volatile uint32 reg;
strHif.u8Opcode = u8Opcode&(~NBIT7);
strHif.u8Gid = u8Gid;
strHif.u16Length = M2M_HIF_HDR_OFFSET;
strHif.u16Length += u16CtrlBufSize;
ret = nm_clkless_wake();
reg = 0UL;
reg |= (uint32)u8Gid;
reg |= ((uint32)u8Opcode<<8);
reg |= ((uint32)strHif.u16Length<<16);
ret = nm_write_reg(NMI_STATE_REG,reg);
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 107
reg = 0;
reg |= (1<<1);
ret = nm_write_reg(WIFI_HOST_RCV_CTRL_2, reg);
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* NMI_STATE_REG address = 0x108c */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* Data = 0x000C3001 */
BYTE [5] = u32data >> 16; /* 0x0C is the length and equals 12 */
BYTE [6] = u32data >> 8; /* 0x30 is the Opcode =
M2M_WIFI_REQ_SET_SCAN_REGION */
BYTE [7] = u32data; /* 0x01 is the Group ID = M2M_REQ_GRP_WIFI */
11. The WINC acknowledges the command by sending two bytes [C9] [0].
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_2address = 0x1078*/
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* Data = 0x02 */
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 108
12. The WINC acknowledges the command by sending two bytes [C9] [0].
13. Then HIF polls for DMA address.
for (cnt = 0; cnt < 1000; cnt ++)
{
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_2,(uint32 *)®);
if(ret != M2M_SUCCESS) break;
if (!(reg & 0x2))
{
ret = nm_read_reg_with_ret(0x150400,(uint32 *)&dma_addr);
/*in case of success break */
break;
}
}
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_2 address = 0x1078 */
BYTE [2] = address >> 8;
BYTE [3] = address;
14. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
15. The WINC chip sends the value of the register 0x1078, which equals 0x00.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 109
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* address = 0x1504 */
BYTE [2] = address >> 8;
BYTE [3] = address;
16. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
17. The WINC chip sends the value of the register 0x1504, which equals 0x037AA0.
18. The WINC writes the HIF header to the DMA memory address.
u32CurrAddr = dma_addr;
strHif.u16Length=NM_BSP_B_L_16(strHif.u16Length);
ret = nm_write_block(u32CurrAddr, (uint8*)&strHif, M2M_HIF_HDR_OFFSET);
Command CMD_DMA_EXT_WRITE: 0xC7 /* DMA extended write */
BYTE [0] = CMD_DMA_EXT_WRITE
BYTE [1] = address >> 16; /* address = 0x037AA0 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = size >> 16; /* size = 0x08 */
BYTE [5] = size >> 8;
BYTE [6] = size;
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 110
19. The WINC acknowledges the command by sending three bytes [C7] [0] [F3].
20. The HIF layer writes the data.
21. The HIF writes the Control Buffer data (part of the framing of the request).
if (pu8CtrlBuf != NULL)
{
ret = nm_write_block(u32CurrAddr, pu8CtrlBuf, u16CtrlBufSize);
if(M2M_SUCCESS != ret) goto ERR1;
u32CurrAddr += u16CtrlBufSize;
}
Command CMD_DMA_EXT_WRITE: 0xC7 /* DMA extended write */
BYTE [0] = CMD_DMA_EXT_WRITE
BYTE [1] = address >> 16; /* address = 0x037AA8 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = size >> 16; /* size = 0x04 */
BYTE [5] = size >> 8;
BYTE [6] = size;
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 111
22. The WINC acknowledges the command by sending three bytes [C7] [0] [F3].
23. The HIF layer writes the data.
24. The HIF finished writing the request data to memory and is going to interrupt the chip notifying that
host TX is done.
reg = dma_addr << 2;
reg |= (1 << 1);
ret = nm_write_reg(WIFI_HOST_RCV_CTRL_3, reg);
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_3 address = 0x106C */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* Data = 0x000DEA82 */
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 112
25. The WINC acknowledges the command by sending two bytes [C9] [0].
26. The HIF layer allows the chip to enter Sleep mode again.
sint8 hif_chip_sleep(void)
{
sint8 ret = M2M_SUCCESS;
uint32 reg = 0;
ret = nm_write_reg(WAKE_REG, SLEEP_VALUE);
/* Clear bit 1 */
ret = nm_read_reg_with_ret(0x1, ®);
if(reg&0x2)
{
reg &=~(1 << 1);
ret = nm_write_reg(0x1, reg);
}
}
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WAKE_REG address = 0x1074 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* SLEEP_VALUE Data = 0x4321 */
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
27. The WINC acknowledges the command by sending two bytes [C9] [0].
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 113
Command CMD_INTERNAL_READ: 0xC4 /* internal register read */
BYTE [0] = CMD_INTERNAL_READ
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = 0x00;
28. The WINC acknowledges the command by sending three bytes [C4] [0] [F3].
29. The WINC chip sends the value of the register 0x01 which equals 0x03.
Command CMD_INTERNAL_WRITE: C3 /* internal register write */
BYTE [0] = CMD_INTERNAL_WRITE
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = u32data >> 24; /* Data = 0x01 */
BYTE [4] = u32data >> 16;
BYTE [5] = u32data >> 8;
BYTE [6] = u32data;
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 114
30. The WINC chip acknowledges the command by sending two bytes [C3] [0].
31. At this point, the HIF layer has completed posting the scan Wi-Fi request to the WINC chip for
processing.
14.3.2 RX (Receive Response)
After finishing the required operation (scan Wi-Fi), the WINC interrupts the host to notify of the processing
of the request. The host handles this interrupt to receive the response.
1. First step in hif_isr is to wake up the WINC chip.
sint8 nm_clkless_wake(void)
{
ret = nm_read_reg_with_ret(0x1, ®);
/* Set bit 1 */
ret = nm_write_reg(0x1, reg | (1 << 1));
// Check the clock status
ret = nm_read_reg_with_ret(clk_status_reg_adr, &clk_status_reg);
// Tell Firmware that Host waked up the chip
ret = nm_write_reg(WAKE_REG, WAKE_VALUE);
return ret;
}
Command CMD_INTERNAL_READ: 0xC4 /* internal register read */
BYTE [0] = CMD_INTERNAL_READ
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = 0x00;
2. The WINC acknowledges the command by sending three bytes [C4] [0] [F3].
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 115
3. The WINC chip sends the value of the register 0x01 which equals 0x01.
Command CMD_INTERNAL_WRITE: C3 /* internal register write */
BYTE [0] = CMD_INTERNAL_WRITE
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = u32data >> 24; /* Data = 0x03 */
BYTE [4] = u32data >> 16;
BYTE [5] = u32data >> 8;
BYTE [6] = u32data;
4. The WINC acknowledges the command by sending two bytes [C3] [0].
Command CMD_INTERNAL_READ: 0xC4 /* internal register read */
BYTE [0] = CMD_INTERNAL_READ
BYTE [1] = address >> 8; /* address = 0x0F */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = 0x00;
5. The WINC acknowledges the command by sending three bytes [C4] [0] [F3].
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 116
6. Then WINC chip sends the value of the register 0x01 which equals 0x07.
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WAKE_REG address = 0x1074 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* WAKE_VALUE Data = 0x5678 */
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
7. The chip acknowledges the command by sending two bytes [C9] [0].
8. Read register WIFI_HOST_RCV_CTRL_0 to check if there is a new interrupt, and clear it.
static sint8 hif_isr(void)
{
sint8 ret ;
uint32 reg;
volatile tstrHifHdr strHif;
ret = hif_chip_wake();
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_0, ®);
if(reg & 0x1) /* New interrupt has been received */
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 117
{
uint16 size;
/*Clearing RX interrupt*/
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_0,®);
reg &= ~(1<<0);
ret = nm_write_reg(WIFI_HOST_RCV_CTRL_0,reg);
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_0 address = 0x1070 */
BYTE [2] = address >> 8;
BYTE [3] = address;
9. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
10. The WINC chip sends the value of the register 0x1070 which equals 0x31.
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_0 address = 0x1070 */
BYTE [2] = address >> 8;
BYTE [3] = address;
11. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 118
12. The WINC chip sends the value of the register 0x1070 which equals 0x31.
13. Clear the WINC Interrupt.
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_0 address = 0x1070 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* Data = 0x30 */
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
14. The chip acknowledges the command by sending two bytes [C9] [0].
15. The HIF reads the data size.
/* read the rx size */
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_0, ®);
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_0 address = 0x1070 */
BYTE [2] = address >> 8;
BYTE [3] = address;
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 119
16. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
17. The WINC chip sends the value of the register 0x1070 which equals 0x30.
18. The HIF reads hif header address.
/** start bus transfer**/
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_1, &address);
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_1 address = 0x1084 */
BYTE [2] = address >> 8;
BYTE [3] = address;
19. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
20. The WINC chip sends the value of the register 0x1078 which equals 0x037AB0.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 120
21. The HIF reads the hif header data (as a block).
ret = nm_read_block(address, (uint8*)&strHif, sizeof(tstrHifHdr));
Command CMD_DMA_EXT_READ: C8 /* dma extended read */
BYTE [0] = CMD_DMA_EXT_READ
BYTE [1] = address >> 16; /* address = 0x037AB0*/
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = size >> 16;
BYTE [5] = size >>;
BYTE [6] = size;
22. The WINC acknowledges the command by sending three bytes [C8] [0] [F3].
23. The WINC sends the data block (four bytes).
24. The HIF calls the appropriate handler according to the hif header received which tries to receive the
Response data payload.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 121
Note: hif_receive obtains additional data.
sint8 hif_receive(uint32 u32Addr, uint8 *pu8Buf, uint16 u16Sz, uint8 isDone)
{
uint32 address, reg;
uint16 size;
sint8 ret = M2M_SUCCESS;
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_0,®);
size = (uint16)((reg >> 2) & 0xfff);
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_1,&address);
/* Receive the payload */
ret = nm_read_block(u32Addr, pu8Buf, u16Sz);
}
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_0 address = 0x1070 */
BYTE [2] = address >> 8;
BYTE [3] = address;
25. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
26. The WINC chip sends the value of the register 0x1070 which equals 0x30.
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_1 address = 0x1084 */
BYTE [2] = address >> 8;
BYTE [3] = address;
27. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 122
28. The WINC chip sends the value of the register 0x1078 which equals 0x037AB0.
Command CMD_DMA_EXT_READ: C8 /* dma extended read */
BYTE [0] = CMD_DMA_EXT_READ
BYTE [1] = address >> 16; /* address = 0x037AB8*/
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = size >> 16;
BYTE [5] = size >>;
BYTE [6] = size;
29. The WINC acknowledges the command by sending three bytes [C8] [0] [F3].
30. The WINC sends the data block (four bytes).
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 123
31. After the HIF layer received the response, it interrupts the chip to send the notification that the host
RX is done.
static sint8 hif_set_rx_done(void)
{
uint32 reg;
sint8 ret = M2M_SUCCESS;
ret = nm_read_reg_with_ret(WIFI_HOST_RCV_CTRL_0,®);
/* Set RX Done */
reg |= (1<<1);
ret = nm_write_reg(WIFI_HOST_RCV_CTRL_0,reg);
}
Command CMD_SINGLE_READ: 0xCA /* single word (4 bytes) read */
BYTE [0] = CMD_SINGLE_READ
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_0 address = 0x1070 */
BYTE [2] = address >> 8;
BYTE [3] = address;
32. The WINC acknowledges the command by sending three bytes [CA] [0] [F3].
33. The WINC chip sends the value of the register 0x1070 which equals 0x30.
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WIFI_HOST_RCV_CTRL_0 address = 0x1070 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* Data = 0x32*/
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 124
34. The chip acknowledges the command by sending two bytes [C9] [0].
35. The HIF layer allows the chip to enter Sleep mode again.
sint8 hif_chip_sleep(void)
{
sint8 ret = M2M_SUCCESS;
uint32 reg = 0;
ret = nm_write_reg(WAKE_REG, SLEEP_VALUE);
/* Clear bit 1 */
ret = nm_read_reg_with_ret(0x1, ®);
if(reg&0x2)
{
reg &=~(1 << 1);
ret = nm_write_reg(0x1, reg);
}
}
Command CMD_SINGLE_WRITE:0XC9 /* single word write */
BYTE [0] = CMD_SINGLE_WRITE
BYTE [1] = address >> 16; /* WAKE_REG address = 0x1074 */
BYTE [2] = address >> 8;
BYTE [3] = address;
BYTE [4] = u32data >> 24; /* SLEEP_VALUE Data = 0x4321 */
BYTE [5] = u32data >> 16;
BYTE [6] = u32data >> 8;
BYTE [7] = u32data;
36. The WINC acknowledges the command by sending two bytes [C9] [0].
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 125
Command CMD_INTERNAL_READ: 0xC4 /* internal register read */
BYTE [0] = CMD_INTERNAL_READ
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = 0x00;
37. The WINC acknowledges the command by sending three bytes [C4] [0] [F3].
38. Then WINC chip sends the value of the register 0x01 which equals 0x03.
Command CMD_INTERNAL_WRITE: C3 /* internal register write */
BYTE [0] = CMD_INTERNAL_WRITE
BYTE [1] = address >> 8; /* address = 0x01 */
BYTE [1] |= (1 << 7); /* clockless register */
BYTE [2] = address;
BYTE [3] = u32data >> 24; /* Data = 0x01 */
BYTE [4] = u32data >> 16;
BYTE [5] = u32data >> 8;
BYTE [6] = u32data;
39. The WINC chip acknowledges the command by sending two bytes [C3] [0].
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 126
40. Scan Wi-Fi request is sent to the WINC chip and the response is successfully sent to the host.
ATWINC15x0
WINC SPI Protocol
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 127
15. Appendix A. How to Generate Certificates
15.1 Introduction
This chapter explains the required procedures to create and sign custom certificates using OpenSSL. To
use this guide you must install OpenSSL on your machine.
OpenSSL is an open-source implementation of the SSL and TLS protocols. The core library, written in the
C programming language, implements basic cryptographic functions and provides various utility
functions.
OpenSSL can be downloaded from the following URL: https://www.openssl.org/related/binaries.html.
15.2 Steps
After installing OpenSSL, open a CMD prompt and navigate to the directory where OpenSSL was
installed (For example: C:\OpenSSL-Win64\bin).
1. Generate a key for the CA (certification authority). To generate a 4096-bit long RSA (creates a new
file CA_KEY.key to store the random key), using the following command (CMD):
openssl genrsa -out CA_KEY.key 4096
2. Create your self-signed root CA certificate CA_CERT.crt; you need to provide some data for your
Root certificate, using the following command (CMD):
openssl req -new -x509 -days 1826 -key CA_KEY.key -out CA_CERT.crt
3. Create the custom certificate, which is signed by the CA root certificate created earlier. First,
generate the Custom.key, using the following command (CMD):
openssl genrsa -out Custom.key 4096
4. To generate a certificate request file (CSR) using this generated key, use the following command
(CMD):
openssl req -new -key Custom.key -out CertReq.csr
5. Process the request for the certificate and get it signed by the root CA, using the following
command (CMD):
openssl x509 -req -days 730 -in CertReq.csr -CA CA_CERT.crt -CAkey CA_KEY.key -
set_serial 01 -out CustomCert.crt
15.3 Limitations
The following are the limitations of BigInt_ModExp() API.
1. DHE greater than 2048-bit is not supported.
2. RSA signature verification greater than 2048-bit is done in software; 4096-bit takes 4 seconds per
verification, assuming a typical public key of 2^16+1.
3. RSA signature generation greater than 2048-bit is not supported.
ATWINC15x0
Appendix A. How to Generate Certificates
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 128
16. Appendix B. X.509 Certificate Format and Conversion
16.1 Introduction
The most known encodings for the X.509 digital certificates are PEM and DER formats.
The PEM format is base64 encoding of the DER enclosed with messages "-----BEGIN CERTIFICATE-----"
and "-----END CERTIFICATE-----".
16.2 Conversion Between Different Formats
The current implementation of the WINC root_certificate_downloader supports only DER format. If the
certificate is not in DER format, it must be converted first. The conversion between different formats are
done in several methods:
16.2.1 Using Windows
From Windows®
7, double click on the .crt certificate file and then go to the Details Tab and press “Copy
to File”. Follow the Certificate Export Wizard until the Finish button.
16.2.2 Using OpenSSL
The OpenSSL is used for certificate conversion by the following command.
openssl x509 -outform der -in certificate.pem -out certificate.der
ATWINC15x0
Appendix B. X.509 Certificate Format and C...
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 129
16.2.3 Online Conversion
There are useful online tools which provide conversion between the certificate formats, which can be
found through searching online using keywords such as "OpenSSL".
ATWINC15x0
Appendix B. X.509 Certificate Format and C...
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 130
17. References
The following documents can be used for further study:
• ATWINC15x0 Wi-Fi Network Controller Software Programming Guide
• ATWINC15x0-MR210xB Data Sheet
The following web page can be referred for further study on API:
• Atmel Software Framework for ATWINC1500 (Wi-Fi)
ATWINC15x0
References
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 131
18. Document Revision History
Rev B - 10/2018
Section Changes
6.2.3.12 setsockopt Added SOL_SSL_SOCKET information with example.
10. Over-The-Air
Upgrade
Removed “no HTTPS supported” from the chapter.
8.5 AP Mode Code
Example
Added Power Save note.
Document Removed the content related to Wi-Fi Direct mode and Wi-Fi Sniffer mode.
4.2 WINC Modes of
Operation
Updated WINC modes of operation.
8.1 Overview and 8.2
Setting the WINC AP
Mode
Updated the Wi-Fi AP mode chapter corresponding to WINC1500 v19.6.1
firmware.
5. Wi-Fi Station Mode Added support for Encrypted Credential Storage, Simple Roaming, Multiple
Gain Table, and Host File Download for Wi-Fi Station mode.
Rev A - 05/2017
Section Changes
Document • Updated from Atmel to Microchip template.
• Assigned a new Microchip document number. Previous version is
Atmel 42420 revision B.
• ISBN number added.
ATWINC15x0
Document Revision History
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 132
The Microchip Web Site
Microchip provides online support via our web site at http://www.microchip.com/. This web site is used as
a means to make files and information easily available to customers. Accessible by using your favorite
Internet browser, the web site contains the following information:
• Product Support – Data sheets and errata, application notes and sample programs, design
resources, user’s guides and hardware support documents, latest software releases and archived
software
• General Technical Support – Frequently Asked Questions (FAQ), technical support requests,
online discussion groups, Microchip consultant program member listing
• Business of Microchip – Product selector and ordering guides, latest Microchip press releases,
listing of seminars and events, listings of Microchip sales offices, distributors and factory
representatives
Customer Change Notification Service
Microchip’s customer notification service helps keep customers current on Microchip products.
Subscribers will receive e-mail notification whenever there are changes, updates, revisions or errata
related to a specified product family or development tool of interest.
To register, access the Microchip web site at http://www.microchip.com/. Under “Support”, click on
“Customer Change Notification” and follow the registration instructions.
Customer Support
Users of Microchip products can receive assistance through several channels:
• Distributor or Representative
• Local Sales Office
• Field Application Engineer (FAE)
• Technical Support
Customers should contact their distributor, representative or Field Application Engineer (FAE) for support.
Local sales offices are also available to help customers. A listing of sales offices and locations is included
in the back of this document.
Technical support is available through the web site at: http://www.microchip.com/support
Microchip Devices Code Protection Feature
Note the following details of the code protection feature on Microchip devices:
• Microchip products meet the specification contained in their particular Microchip Data Sheet.
• Microchip believes that its family of products is one of the most secure families of its kind on the
market today, when used in the intended manner and under normal conditions.
• There are dishonest and possibly illegal methods used to breach the code protection feature. All of
these methods, to our knowledge, require using the Microchip products in a manner outside the
operating specifications contained in Microchip’s Data Sheets. Most likely, the person doing so is
engaged in theft of intellectual property.
• Microchip is willing to work with the customer who is concerned about the integrity of their code.
ATWINC15x0
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 133
• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their
code. Code protection does not mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the
code protection features of our products. Attempts to break Microchip’s code protection feature may be a
violation of the Digital Millennium Copyright Act. If such acts allow unauthorized access to your software
or other copyrighted work, you may have a right to sue for relief under that Act.
Legal Notice
Information contained in this publication regarding device applications and the like is provided only for
your convenience and may be superseded by updates. It is your responsibility to ensure that your
application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY
OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS
CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE.
Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life
support and/or safety applications is entirely at the buyer’s risk, and the buyer agrees to defend,
indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting
from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual
property rights unless otherwise stated.
Trademarks
The Microchip name and logo, the Microchip logo, AnyRate, AVR, AVR logo, AVR Freaks, BitCloud,
chipKIT, chipKIT logo, CryptoMemory, CryptoRF, dsPIC, FlashFlex, flexPWR, Heldo, JukeBlox, KeeLoq,
Kleer, LANCheck, LINK MD, maXStylus, maXTouch, MediaLB, megaAVR, MOST, MOST logo, MPLAB,
OptoLyzer, PIC, picoPower, PICSTART, PIC32 logo, Prochip Designer, QTouch, SAM-BA, SpyNIC, SST,
SST Logo, SuperFlash, tinyAVR, UNI/O, and XMEGA are registered trademarks of Microchip Technology
Incorporated in the U.S.A. and other countries.
ClockWorks, The Embedded Control Solutions Company, EtherSynch, Hyper Speed Control, HyperLight
Load, IntelliMOS, mTouch, Precision Edge, and Quiet-Wire are registered trademarks of Microchip
Technology Incorporated in the U.S.A.
Adjacent Key Suppression, AKS, Analog-for-the-Digital Age, Any Capacitor, AnyIn, AnyOut, BodyCom,
CodeGuard, CryptoAuthentication, CryptoAutomotive, CryptoCompanion, CryptoController, dsPICDEM,
dsPICDEM.net, Dynamic Average Matching, DAM, ECAN, EtherGREEN, In-Circuit Serial Programming,
ICSP, INICnet, Inter-Chip Connectivity, JitterBlocker, KleerNet, KleerNet logo, memBrain, Mindi, MiWi,
motorBench, MPASM, MPF, MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, Omniscient
Code Generation, PICDEM, PICDEM.net, PICkit, PICtail, PowerSmart, PureSilicon, QMatrix, REAL ICE,
Ripple Blocker, SAM-ICE, Serial Quad I/O, SMART-I.S., SQI, SuperSwitcher, SuperSwitcher II, Total
Endurance, TSHARC, USBCheck, VariSense, ViewSpan, WiperLock, Wireless DNA, and ZENA are
trademarks of Microchip Technology Incorporated in the U.S.A. and other countries.
SQTP is a service mark of Microchip Technology Incorporated in the U.S.A.
Silicon Storage Technology is a registered trademark of Microchip Technology Inc. in other countries.
GestIC is a registered trademark of Microchip Technology Germany II GmbH & Co. KG, a subsidiary of
Microchip Technology Inc., in other countries.
All other trademarks mentioned herein are property of their respective companies.
ATWINC15x0
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 134
© 2018, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.
ISBN: 978-1-5224-3632-4
Quality Management System Certified by DNV
ISO/TS 16949
Microchip received ISO/TS-16949:2009 certification for its worldwide headquarters, design and wafer
fabrication facilities in Chandler and Tempe, Arizona; Gresham, Oregon and design centers in California
and India. The Company’s quality system processes and procedures are for its PIC®
MCUs and dsPIC®
DSCs, KEELOQ®
code hopping devices, Serial EEPROMs, microperipherals, nonvolatile memory and
analog products. In addition, Microchip’s quality system for the design and manufacture of development
systems is ISO 9001:2000 certified.
ATWINC15x0
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 135
AMERICAS ASIA/PACIFIC ASIA/PACIFIC EUROPE
Corporate Office
2355 West Chandler Blvd.
Chandler, AZ 85224-6199
Tel: 480-792-7200
Fax: 480-792-7277
Technical Support:
http://www.microchip.com/
support
Web Address:
www.microchip.com
Atlanta
Duluth, GA
Tel: 678-957-9614
Fax: 678-957-1455
Austin, TX
Tel: 512-257-3370
Boston
Westborough, MA
Tel: 774-760-0087
Fax: 774-760-0088
Chicago
Itasca, IL
Tel: 630-285-0071
Fax: 630-285-0075
Dallas
Addison, TX
Tel: 972-818-7423
Fax: 972-818-2924
Detroit
Novi, MI
Tel: 248-848-4000
Houston, TX
Tel: 281-894-5983
Indianapolis
Noblesville, IN
Tel: 317-773-8323
Fax: 317-773-5453
Tel: 317-536-2380
Los Angeles
Mission Viejo, CA
Tel: 949-462-9523
Fax: 949-462-9608
Tel: 951-273-7800
Raleigh, NC
Tel: 919-844-7510
New York, NY
Tel: 631-435-6000
San Jose, CA
Tel: 408-735-9110
Tel: 408-436-4270
Canada - Toronto
Tel: 905-695-1980
Fax: 905-695-2078
Australia - Sydney
Tel: 61-2-9868-6733
China - Beijing
Tel: 86-10-8569-7000
China - Chengdu
Tel: 86-28-8665-5511
China - Chongqing
Tel: 86-23-8980-9588
China - Dongguan
Tel: 86-769-8702-9880
China - Guangzhou
Tel: 86-20-8755-8029
China - Hangzhou
Tel: 86-571-8792-8115
China - Hong Kong SAR
Tel: 852-2943-5100
China - Nanjing
Tel: 86-25-8473-2460
China - Qingdao
Tel: 86-532-8502-7355
China - Shanghai
Tel: 86-21-3326-8000
China - Shenyang
Tel: 86-24-2334-2829
China - Shenzhen
Tel: 86-755-8864-2200
China - Suzhou
Tel: 86-186-6233-1526
China - Wuhan
Tel: 86-27-5980-5300
China - Xian
Tel: 86-29-8833-7252
China - Xiamen
Tel: 86-592-2388138
China - Zhuhai
Tel: 86-756-3210040
India - Bangalore
Tel: 91-80-3090-4444
India - New Delhi
Tel: 91-11-4160-8631
India - Pune
Tel: 91-20-4121-0141
Japan - Osaka
Tel: 81-6-6152-7160
Japan - Tokyo
Tel: 81-3-6880- 3770
Korea - Daegu
Tel: 82-53-744-4301
Korea - Seoul
Tel: 82-2-554-7200
Malaysia - Kuala Lumpur
Tel: 60-3-7651-7906
Malaysia - Penang
Tel: 60-4-227-8870
Philippines - Manila
Tel: 63-2-634-9065
Singapore
Tel: 65-6334-8870
Taiwan - Hsin Chu
Tel: 886-3-577-8366
Taiwan - Kaohsiung
Tel: 886-7-213-7830
Taiwan - Taipei
Tel: 886-2-2508-8600
Thailand - Bangkok
Tel: 66-2-694-1351
Vietnam - Ho Chi Minh
Tel: 84-28-5448-2100
Austria - Wels
Tel: 43-7242-2244-39
Fax: 43-7242-2244-393
Denmark - Copenhagen
Tel: 45-4450-2828
Fax: 45-4485-2829
Finland - Espoo
Tel: 358-9-4520-820
France - Paris
Tel: 33-1-69-53-63-20
Fax: 33-1-69-30-90-79
Germany - Garching
Tel: 49-8931-9700
Germany - Haan
Tel: 49-2129-3766400
Germany - Heilbronn
Tel: 49-7131-67-3636
Germany - Karlsruhe
Tel: 49-721-625370
Germany - Munich
Tel: 49-89-627-144-0
Fax: 49-89-627-144-44
Germany - Rosenheim
Tel: 49-8031-354-560
Israel - Ra’anana
Tel: 972-9-744-7705
Italy - Milan
Tel: 39-0331-742611
Fax: 39-0331-466781
Italy - Padova
Tel: 39-049-7625286
Netherlands - Drunen
Tel: 31-416-690399
Fax: 31-416-690340
Norway - Trondheim
Tel: 47-72884388
Poland - Warsaw
Tel: 48-22-3325737
Romania - Bucharest
Tel: 40-21-407-87-50
Spain - Madrid
Tel: 34-91-708-08-90
Fax: 34-91-708-08-91
Sweden - Gothenberg
Tel: 46-31-704-60-40
Sweden - Stockholm
Tel: 46-8-5090-4654
UK - Wokingham
Tel: 44-118-921-5800
Fax: 44-118-921-5820
Worldwide Sales and Service
© 2018 Microchip Technology Inc. User Guide DS00002389B-page 136
MPLAB Harmony Help
MPLAB Harmony
Copyright (c) 2013 Microchip Technology Inc. All rights reserved.
Table of Contents
1 Start Here 1-1
MPLAB Harmony Help
1
1 Start Here
This topic describes how to get started using the MPLAB Harmony Integrated Software Framework.
1. First Time Users
Name Description
Before You Start Before you start using MPLAB Harmony, be sure to install the MPLAB X IDE
Plug-In modules.
What is MPLAB Harmony? This topic provides an overview of key concepts necessary to understand the
MPLAB Harmony architecture.
Project Layout This topic explains how an MPLAB Harmony project is organized.
The Main File This topic describes the logic of the "main.c" file and the C-language "main"
function in an MPLAB Harmony project.
The Application File(s) This topic describes the normal structure of MPLAB Harmony application files.
More Information Describes what is available from the MPLAB Harmony web page.
Description
Software Building Blocks
MPLAB Harmony is a framework of software modules that serve as building blocks for your application. If this is the first time
you've used MPLAB Harmony, the "First Time Users" section is the best place to start learning. If you're an experienced MPLAB
Harmony developer, be sure to look at the "Release Notes & Information" section to find out what is in this release and what is
new.
1 MPLAB Harmony Help
1-1
1.1 1. First Time Users
1.1.1 Before You Start
Before you start using MPLAB Harmony, be sure to install the MPLAB X IDE Plug-In modules.
Description
Before you start using MPLAB Harmony, you should install the following MPLAB X IDE plug in modules, included in the MPLAB
Harmony installation.
1. The MPLAB Harmony "Help" plug-in module. (Located at: /doc/org-microchip-harmony_help.nbm)
2. The MPLAB Harmony Configurator plug-in module. (Located at:
/utilities/configurator/com-microchip-harmonyconfigurator.nbm)
Installing the Plug In Modules
1. Start MPLAB X IDE and select "Plugins" from the "Tools" menu as shown below.
2. Click the "Add Plugins..." button, navigate to and open the "com-microchip-harmonyconfigurator.nbm" plug-in file, as shown
below.
1.1 1. First Time Users MPLAB Harmony Help Before You Start
1-2
3. Ensure that the box under "Install" for the "MPLAB Harmony Configurator" plug-in is selected and click "Install" as shown
below.
1.1 1. First Time Users MPLAB Harmony Help Before You Start
1-3
4. Follow the prompts from the installation and continue until the installation completes. (Do not worry if the version you're
installing is "signed" but not "trusted". Just click "continue"). Once the installation has finished you can close the "Plugins" dialog
box.
You should now see a "MPLAB Harmony Configurator" option under the "Tools" menu. This indicates that the project
Configurator has been successfully installed.
1.1.2 What is MPLAB Harmony?
This topic provides an overview of key concepts necessary to understand the MPLAB Harmony architecture.
Description
Introduction
Microchip MPLAB® Harmony is the result of a holistic, aggregate approach to creating firmware solutions for embedded systems
using Microchip microcontrollers.
MPLAB® Harmony Block Diagram
1.1 1. First Time Users MPLAB Harmony Help What is MPLAB Harmony?
1-4
MPLAB Harmony Overview
Designed almost completely in the C language (with support for C++), MPLAB Harmony takes key elements of modular and
object-oriented design, adds in the flexibility to use a Real-Time Operating System (RTOS) or work without one if you prefer, and
provides a framework of software modules that are easy to use, configurable for your specific needs, and that work together in
complete harmony.
Portability
Portability is a concern that is often overlooked when a silicon manufacturer provides software. However, breadth of solutions is
a hallmark strength of Microchip, and MPLAB Harmony provides simple libraries to abstract away part-specific details and make
Microchip microcontrollers easy to use, regardless of which part you choose. Any time you design a new product or update an
existing one you have to balance capabilities against cost, but cost is more than just the bill of materials. It’s also the
Non-Refundable Engineering (NRE) cost to design and develop your solution. MPLAB Harmony provides peripheral libraries,
device drivers, and other libraries that use clear and consistent interfaces, requiring little or no change in your application code
and minimizing the engineering time and effort for each new design.
Device Drivers
The primary purpose of an MPLAB Harmony device driver (or “driver”) is to provide a simple and highly abstracted interface to a
peripheral, allowing your application (or other module in the system) to interact with a peripheral through a consistent set of
functions. A device driver is responsible for managing access to a peripheral, so that requests from different modules do not
conflict with each other, and for managing the state of that peripheral so that it always operates correctly.
Peripheral Libraries
A Peripheral Library (PLIB) is a simple access library that provides a consistent (but very low level) interface to a peripheral that
is “on board” the microcontroller. PLIBs hide register details, making it easier to write drivers that support multiple microcontroller
families, but they are not normally used by applications directly to interact with peripherals, as they provide little abstraction, and
because they require the caller to manage the detailed operation of a peripheral (including preventing conflicting requests from
other modules). Because of the lack of conflict protection in a PLIB, only one module in a system should directly access the PLIB
for a peripheral. Therefore, PLIBs are primarily used to implement device drivers (and some system services) to make them
portable.
Modularity
MPLAB Harmony libraries are modular software “building blocks” that allow you to divide-and-conquer your firmware design. The
interface to each library consists of a highly cohesive set of functions (not globally accessible variables or shared registers), so
that each module can manage its own resources. If one module needs to use the resources of another module, it calls that
module’s interface functions to do so. Interfaces between modules are kept simple with minimal inter-dependencies so that
modules are loosely coupled to each other. This approach helps to eliminate conflicts between modules and allows them to be
more easily used together like building blocks to create the solutions you need.
1.1 1. First Time Users MPLAB Harmony Help What is MPLAB Harmony?
1-5
Middleware Libraries
The normal usage models of some of the more complex peripherals, (i.e., USB or network interfaces) requires interpreting
complex protocols or may require substantial additional processing to produce useable results, such as drawing graphical
images on an LCD screen with an LCD controller peripheral. Therefore, while a device driver may be completely sufficient for a
simple peripheral like a UART, some peripherals require what is frequently called “middleware” (aptly named because it sits
between your application and the hardware abstraction layer or “driver” layer). MPLAB Harmony provides several middleware
library “stacks” to manage these more complex peripherals and provide the functionality you need and expect.
MPLAB Harmony middleware “stacks” are usually built upon device drivers and system services (explained below) so that they
can be supported on any Microchip microcontroller for which the required driver or service is supported. However, special
purpose implementations may be available that integrate the driver, certain services, and various modules within the “stack” for
efficiency.
System Services
MPLAB Harmony system services are responsible for managing shared resources so that other modules (drivers, middleware,
and applications) do not conflict on shared resources. For example, if the TCP/IP, USB, and Graphics stacks attempted to
concurrently use the Timer2 peripheral to perform some periodic task, they would very likely interfere with each other. However,
if instead they used a timer system service (as the following image illustrates), it is the responsibility of the system service to
keep the separate requests from interfering with each other. The timer service can be configured as desired for a specific system
(for example, you might decide to use Timer3 instead of Timer2) isolating the necessary changes to the configuration of a single
module and preventing potential conflicts.
The use of a system service is very similar the use of a device driver, except that a driver normally requires the caller to “open” it
to create unique client-to-driver association. A system service does not normally require the caller to open the service before
using it because system services are frequently shared by many clients within the system.
Compatibility
MPLAB Harmony modules (drivers, system services, and middleware – excluding PLIBs) are “active”. This means when an
application calls a module’s interface function, the call will usually return immediately and the module will continue working on its
own to complete the operation. Most modules will then provide a notification mechanism so the caller (i.e., client) can determine
when the operation has finished.
Harmony modules are implemented as cooperative state machines. The following image shows the basic idea of how this works.
Each module has an “Initialize” function and each module has one (or more) “Tasks” function(s) to maintain its state machine(s).
The state machines of all modules are initialized, shortly after the system comes out of reset in “main”. After that (in a polled
1.1 1. First Time Users MPLAB Harmony Help What is MPLAB Harmony?
1-6
configuration, with no OS), the system drops into a “super loop” where each module’s state machine function is repeatedly
called, one after the other, to allow it to do the next “task” necessary to keep its state machine running. This allows the system to
keep all modules running using a cooperative or shared “multi-tasking” technique. Modules (under control of your application)
interact with each other by calling the interface functions of other modules (as illustrated below) and the system-wide “super
loop” keeps all modules in the system running so they stay “active” and do their jobs.
This method is not suitable for all needs; therefore, other configurations are possible. However, a polled configuration is the
simplest to understand and it best illustrates the basic concept of how MPLAB Harmony modules work together, as shown
below. It is also easy to implement, easy to understand, and easy to debug.
Flexibility
The basic MPLAB Harmony model of cooperating state-machine driven modules, when combined with a little configurability,
becomes flexible enough to meet the needs of almost any embedded system. For example, if you’re using multiple identical
peripherals, MPLAB Harmony has “dynamic” driver implementations that can manage all instances of a peripheral with a single
instance of the driver code. You might also have a need for multiple “client” modules to use the same instance of a peripheral at
the same time (like the timer example, described previously). To manage this need, MPLAB Harmony has driver
implementations that are intelligent enough to manage requests from multiple clients. On the other hand, your needs may be
simpler than that. So, static and single client drivers are also available to help reduce the amount of code and data storage
needed for your system.
Or, your system may need to combine several middleware stacks and multiple, potentially independent, applications. If that is the
1.1 1. First Time Users MPLAB Harmony Help What is MPLAB Harmony?
1-7
case, the simple polling operation, using the “super loop” method frequently seen in simple embedded systems may not be
sufficient. However, when you start adding more modules, it becomes more and more difficult to meet the timing requirements of
all peripherals using a simple polled super loop.
Fortunately, MPLAB Harmony modules are written so that (where appropriate) their state machines can be run directly from an
Interrupt Service Routine (ISR) or an RTOS thread. Using an ISR allows you to eliminate the latency of waiting for the execution
of other modules in the loop to finish before a time-critical event is serviced, and it allows you to use the interrupt prioritization
capabilities available on some Microchip devices to ensure that your system responds to events in the real world in real-time.
Additionally, the ability to schedule and prioritize different tasks for different modules can be obtained for modules that are not
associated with a specific processor interrupt (such as many middleware modules and your application) using a Real-Time
Operating System (RTOS). In fact, that is one of the main reasons to use an RTOS. When your system becomes complex
enough that you start struggling to meet your timing requirements using the super loop method, it’s time to use an RTOS.
Fortunately, the MPLAB Harmony module state machines functions can be called from a loop in an RTOS thread just as easily
as they can be called from a polled “super loop” in a system without an RTOS. To allow this, modules are designed to be “thread
safe” by calling semaphore and mutex operations (and a few others, as necessary) through an Operating System Abstraction
Layer (OSAL). The OSAL provides a consistent set of functions to call, regardless of which RTOS is being used (or even if no
RTOS is used). The choice of RTOS to use, if any, is a configuration option. MPLAB Harmony supports several OS and non-OS
configurations and support for more operating systems is possible. All that is required is to implement the OSAL functions
appropriately for the desired OS.
Configurability
Most MPLAB Harmony libraries support a variety of build-time configuration options.
• Selection of supported Microchip microcontroller
• Interrupt-driven or polled execution
• Static-or-dynamic peripheral instance selection (for drivers)
• Single-or-multi-client support (for drivers)
• Other library-specific options
The need for selection of the microcontroller and execution environment has been previously explained. In addition, most drivers
and other library modules are designed to allow you to select a variety of configuration options to tailor them to your specific
usage. For example, you may be able to select buffer sizes for data transfer modules or clock sources for timer modules. The set
of configuration options for each module is identified and explained in the help documentation (along with the interface and
usage information) and peripheral initializer (MPLAB Harmony “Pi”) and configuration tools are provided to help simplify the
process of configuring your system exactly the way you want and to get you started with a set of initial source files for your
project.
Project Structure
To facilitate configurability, MPLAB Harmony projects are normally structured in a way that isolates the code necessary to
1.1 1. First Time Users MPLAB Harmony Help What is MPLAB Harmony?
1-8
configure a “system” from the library modules themselves and from your application code. The following illustrates this concept,
while the second figure shows how the files might appear in an MPLAB X IDE project.
In an MPLAB Harmony project, the “main.c” file is kept very simple and consistent (containing primarily, just the super-loop
previously discussed). The application files (app.c and app.h in the example to the left) are separate from the configuration files
in the “system_config” folder, so it is possible for a single application to have more than one configuration. (Usage of this
capability can be seen in example and demonstration projects included with the installation of MPLAB Harmony.) The library
modules that make up the MPLAB Harmony framework (in the “framework” folder) use the definitions provided in the selected
configuration header (system_config.h, highlighted in the illustration) to specify the configuration options you selected when you
configured the project. Finally the processor-specific peripheral libraries (if used) are provided as both a prebuilt binary (“.a”
linker file) and as in-line source code to allow for maximum build efficiency for your firmware projects.
Conclusion
MPLAB Harmony provides a complete framework for developing your firmware solutions using Microchip microcontrollers and
development tools. The firmware libraries and tools that make up the MPLAB Harmony framework are modular and compatible,
making them simple to use. They’re flexible and configurable, making them easy to tailor to your specific needs. And, they’re
portable across a wide range of Microchip microcontrollers so you’re sure to find a supported part that meets your needs.
1.1 1. First Time Users MPLAB Harmony Help Project Layout
1-9
1.1.3 Project Layout
This topic explains how an MPLAB Harmony project is organized.
Description
A sample project has been created to show you the structure of an MPLAB Harmony project. The "sample" project is available in
the following folder, directly under your MPLAB Harmony installation root folder.
/apps/examples/sample/firmware/sample.X
You should open this project in MPLAB X IDE and follow along with this guide.
An MPLAB Harmony Project is organized as shown below within MPLAB X IDE.
This organization consists of a few key "logical" folders and C-language files, as described below.
The "app" folder, which contains:
• The "main.c" file
• The "app.c" file
The "app" (short for "application") folder holds all of the application's firmware source files for the project. In a simple project, the
"app" folder will directly contain the "main.c" file and the "app.c" file. More complex projects will very likely contain additional files,
as needed. In an MPLAB Harmony project, the "main.c" file normally contains the C-language "main" function and little or nothing
else. This "main" logic is usually consistent across all MPLAB Harmony projects and should not need to be changed. The "app.c"
file normally contains the logic of the application itself. This is where the desired over-all behavior of your system is usually
implemented (although complex applications may have additional files).
The "system_config" folder
1.1 1. First Time Users MPLAB Harmony Help Project Layout
1-10
The "system_config" folder contains one or more subdirectories, each of which corresponds to a configuration of your application
or, more accurately, "system". MPLAB Harmony projects may have multiple configuration. In each configuration, you can select a
different set of libraries or modules, different build parameters for each module and different source files for your application. A
configuration consists of a specific set of properties (tools settings) in MPLAB X IDE and a set of source files that define the build
parameters and source code that control which modules are initialized and maintained in your system.
In MPLAB X IDE, the tools configuration can be selected by using a "pull down" menu in the tool bar at the top of the window or
buy "Right-clicking' on the project name and selecting "Properties". In most example and demo projects distributed with MPLAB
Harmony, name of each MPLAB X IDE configuration will match the name of the associated folder under the "system_config"
folder in the project (the "pic32mx_default" folder in the sample project). When a specific MPLAB X IDE configuration is selected,
the configuration files for that configuration are included in the build and the configuration files in other configuration folders are
excluded from the build.
Note: This is project convention used by example and demo projects provided with MPLAB Harmony. You, of course, may
organize your own projects any way you wish. But, we recommend following this convention if you use multiple configurations in
your projects. We think you'll appreciate the power and flexibility of it.
Configuration Files
• The "system_config.h" file
• The "system_init.c" file
• The "system_tasks.c" file
• The "system_int.c" file (optionally)
A set of three or four files normally make up a complete configuration of the system. The purpose of each of these files is
described in more detail in the following sections. But, the basic idea is that you may want different configurations of your
application for different physical hardware boards, different Microchip microcontrollers, or different feature sets, depending on
your specific needs.
Allowing different configurations of the same application logic makes your application more flexible and provides a
well-organized way to deal with the sort of variation that usually occurs in any project of sufficient size and complexity. This
technique helps to eliminate the duplication of code (and labor) that would otherwise be necessary to manage multiple related
projects. Of course, if you don't need or want that flexibility, all of these files are specifically created for your project and you can
make any modifications to them that you like. The choice is always yours.
1.1 1. First Time Users MPLAB Harmony Help Project Layout
1-11
Important!
The relative path, from the MPLAB X IDE project folder to the configuration folder (containing the "system_config.h" file) for each
project configuration must be placed in the "Includes directories" list in the compiler properties for each configuration of the
MPLAB X IDE project.
The "framework" folder
The "framework" logical folder contains the source files for the MPLAB Harmony framework and libraries. Depending on your
project configuration, there can be many, many files and sub folders under this folder. These files are for MPLAB Harmony
libraries that you should not need to edit. In fact, the framework source files are not normally located in your project. Instead,
these files are included in your project directly from the MPLAB Harmony installation (using relative directory paths). All of the
actual files stay in the MPLAB Harmony installation folder, out of the way.
Notes
1. You always have the option of copying the framework files directly into your project's source folder, if desired. In fact, doing so
is a good idea if you plan to move or distribute your project separately from the MPLAB Harmony installation.
2. In most cases, the "logical folder" organization within the MPLAB X IDE project matches exactly with the physical directory
organization within the MPLAB Harmony installation (and within your project directory) on your disk drive. This is done to keep
things simple and consistent so you only need to learn a single layout. But, there are a couple of notable exceptions.
• MPLAB has a convention of splitting out "Header Files" (".h" files) and "Source Files" (".c" files), so the virtual folder
organization in the MPLAB X IDE project separates the files in to these two groups and the physical directories on disk do
not.
• In an MPLAB Harmony example or demo project, the "app" folder will correspond to the "src" directory on disk under the
application's main folder.
1.1.4 The Main File
This topic describes the logic of the "main.c" file and the C-language "main" function in an MPLAB Harmony project.
Description
The C-language entry point for an MPLAB Harmony embedded application is the "main" function. This function is defined in the
"main.c" file, contained in the project's "app" folder (or "src" directory on disk). The "main" function (see example, below)
implements a simple "super loop", commonly used in embedded applications that do not make use of an operating system.
Example "main" Function Logic
int main ( void )
{
/* Initialize the system. */
SYS_Initialize ( NULL );
while ( true )
{
/* Perform system tasks. */
SYS_Tasks ( );
}
/* Should not come here during normal operation. */
SYS_ASSERT ( false , "Error! Exiting main" );
return ( EXIT_FAILURE );
}
The "SYS_Initialize" Function
1.1 1. First Time Users MPLAB Harmony Help The Main File
1-12
The first thing the main function does is call a function called "SYS_Initialize". The purpose of the "SYS_Initialize" function is to
initialize every software module in the system. MPLAB Harmony is based upon a model of cooperating state machines. So, this
function must ensure that every module's state machine is placed in a valid initial state. The implementation of this function is
one of the things that must be done to configure an MPLAB Harmony system. This function's definition is normally located in the
"system_init.c" file and is normally implemented by you since you're the only one who knows which software modules you want
to include in your project. However, MPLAB Harmony provide a project Configurator to help you get started.
Note: The "SYS_Initialize" function signature has a "void *" input parameter. This is so that it may later be implemented in a
library and an arbitrary initialization data structure may be passed into it. However, for a statically implemented "SYS_Initialize"
function (which will normally be the case if you implement it yourself), this parameter is unnecessary and can be passed as
"NULL". (Note: You could eliminate the parameter, but that may lead to future incompatibilities and the compiler will remove it
automatically for you when optimizations are enabled.)
The "Super Loop"
After all of the modules in the system have been initialized, the "main" function executes an infinite loop to keep the system
running. This is commonly called a "super loop" as it is the outer-most loop, within which the entire system operates. This loop
never exits. So, the code that exists after the end of that loop should never be executed and is only included there for safety,
clarity, and syntactical completeness.
The "SYS_Tasks" Function
Inside of the "super loop", the "main" function calls the "SYS_Tasks" function. The purpose of the "SYS_Tasks" function is to poll
every module in the system to ensure that it continues to operate. This is how the system maintains the state machine of all
polled modules. (Note that some modules may be interrupt driven and thus, not called from the "SYS_Tasks" function.) The
implementation of the "SYS_Tasks" function is also one of the things that you must normally do as part of the system
configuration, again because you are the only one who knows which modules you want to include in your project. You might also
have guessed that this function's definition is normally located in the "system_tasks.c" file. Of course, the MPLAB Harmony
project Configurator can help with this also.
1.1.5 The Application File(s)
This topic describes the normal structure of MPLAB Harmony application files.
Description
From the point of view of an MPLAB Harmony system, an application consists of two basic functions.
• APP_Initialize()
• APP_Tasks()
The application's initialization function (APP_Initialize) is normally called from the "SYS_Initialize" function, called from "main"
before entering the top-level loop. The application's "tasks" function (APP_Tasks) is normally called from the "SYS_Tasks"
function, called from "main" from inside the top-level loop. This is how the application's state machine is initialized and "polled" so
that it can do it's job. The "SYS_Initialize" function is normally implemented in the "system_init.c" file and the "SYS_Tasks"
function is normally implemented in the "sys_tasks.c" file. That is the convention for example and demo projects distributed with
MPLAB Harmony and that is the case for the sample project. You may do as you choose in your own projects, but we
recommend following this convention as it will make it easier to manage multiple configurations if you need them and it will be
consistent with the MPLAB Harmony project Configurator and other tools.
Application Initialization
An application's initialization function places the application's state machine in its initial state and may perform additional
initialization if necessary. This function must not block and it should not call the routines of any other modules that may block. If
1.1 1. First Time Users MPLAB Harmony Help The Application File(s)
1-13
something needs to be initialized that may take time to complete, that initialization should be done in the application's state
machine (i.e. in it's "Tasks" function).
Sample Application Initialization Function:
void APP_Initialize( void )
{
/* Copy the message string to a buffer. */
strncpy(appData.buffer, APP_HELLO_STRING, APP_BUFFER_SIZE);
/* Prepare a buffer object for transfer using the USART driver. */
appData.bufferObject.buffer = appData.buffer;
appData.bufferObject.bufferSize = min(APP_BUFFER_SIZE, strlen(appData.buffer));
appData.bufferObject.flags = DRV_USART_BUFFER_FLAG_WRITE;
/* Place the App state machine in it's initial state. */
appData.state = APP_STATE_INIT;
}
The sample project's initialization function initializes an internal buffer to prepare a "Hello World" message for transmission on a
USART and places the application's state machine in its initial state by assigning the "APP_STATE_INIT" enumeration value into
the "state" member of the data structure that contains all of the data required by the application (appData). This structure is
defined globally, but is only ever accessed by the application itself. The application's initialization function is called from the
"SYS_Initialize" function (defined in "system_init.c") which is called from "main" after a system reset. Using this technique, the
application is initialized (along with the rest of the system) whenever the system comes out of reset.
Application Tasks
The application's state machine breaks up the job that the application must do into several short "tasks" that it can complete
quickly, but between which it must wait for some other module to complete some tasks of its own. (In this case the other module
is the USART driver.) Once each short task has completed successfully, the application transitions to another state to perform
the next short task.
Example Application Tasks Function:
void APP_Tasks( void )
{
/* Status of USART driver */
DRV_USART_CLIENT_STATUS usartStatus;
/* Status of buffer submitted to USART */
DRV_USART_BUFFER_STATUS bufferStatus;
/* Check the application state*/
switch ( appData.state )
{
/* Keep trying to open the driver until we succeed. */
case APP_STATE_INIT:
{
/* open an instance of USART driver */
appData.usartHandle = DRV_USART_Open(SYS_USART_DRIVER_INDEX,
DRV_IO_INTENT_READWRITE);
if (appData.usartHandle != DRV_HANDLE_INVALID )
{
/* Update the state */
appData.state = APP_STATE_WAIT_FOR_READY;
}
break;
}
/* Send the message when the driver is ready. */
case APP_STATE_WAIT_FOR_READY:
{
1.1 1. First Time Users MPLAB Harmony Help The Application File(s)
1-14
/* Get the USART driver status */
usartStatus = DRV_USART_ClientStatus( appData.usartHandle );
if ( usartStatus == DRV_USART_CLIENT_STATUS_READY )
{
/* Submit buffer to USART */
appData.usartBufferHandle = DRV_USART_BufferAdd(appData.usartHandle,
&appData.bufferObject);
if ( appData.usartBufferHandle != DRV_HANDLE_INVALID )
{
/* Buffer is accepted. Driver will transmit. */
appData.state = APP_STATE_WAIT_FOR_DONE;
}
}
break;
}
case APP_STATE_WAIT_FOR_DONE:
{
bufferStatus = DRV_USART_BufferStatus(appData.usartHandle,
appData.usartBufferHandle);
if ( DRV_USART_BUFFER_COMPLETED == bufferStatus )
{
/* Work is done, move to idle state. */
appData.state = APP_STATE_IDLE;
}
}
/* Idle state (do nothing) */
case APP_STATE_IDLE:
default:
break;
}
}
Sample Application States
The sample application's "tasks" function breaks the operation of the application down in to the following states using a "switch"
statement with the following "cases".
• APP_STATE_INIT
• APP_STATE_WAIT_FOR_READY
• APP_STATE_WAIT_FOR_DONE
• APP_STATE_IDLE
The sample application is placed into the "APP_STATE_INIT" state when by the application's initialization function before the
"tasks" function is ever called. So, the first time the "APP_Tasks" function is called, the switch statement executes the code
under this case and the first short "task" the sample application attempts to do is open the USART driver to obtain a handle so
that it can transfer data over the USART. Notice that the application checks the value of the handle returned from the
"DRV_USART_Open" function to ensure that it is valid before it transitions to the "APP_STATE_WAIT_FOR_READY" state. If
the value of the handle retuned be the driver's "open" function is invalid (equal to "DRV_HANDLE_INVALID"), then the
application stays in the "APP_STATE_INIT" state and keeps trying to open the USART driver every time it's "tasks" function is
called.
Once the application has a valid handle to the USART driver, it executes the code under the
"APP_STATE_WAIT_FOR_READY" case the next time its "APP_Tasks" function is called . In this state, the application calls a
USART driver status routine (DRV_USART_ClientStatus) to see if the driver is ready to transfer data . If the driver is ready, the
application calls a USART driver data transfer routine (DRV_USART_BufferAdd) to send the data buffer it prepared in the
"APP_Initiaize" function to the USART. Then, it checks the handle returned by the "DRV_USART_BufferAdd" routine to see if it
is valid. If the buffer handle is valid, it indicates that the USART driver has accepted the buffer and will take responsibility for the
1.1 1. First Time Users MPLAB Harmony Help The Application File(s)
1-15
data transfer from that point forward. The application does not have to do anything else to cause the data transfer to occur, but it
may want to know when the transfer has completed, so it transitions to the "APP_STATE_WAIT_FOR_DONE" state. However, if
the buffer is not accepted by the driver (in which case the handle returned by the "DRV_USART_BufferAdd" function would be
invalid), the application stays in the "APP_STATE_WAIT_FOR_READY" and tries again the next time the "APP_Tasks" function
is called by the system (i.e. the "SYS_Tasks" function).
Once the application is in the "APP_STATE_WAIT_FOR_DONE" state, it calls a buffer status routine
(DRV_USART_BufferStatus) to check and see if the buffer it sent has completed. Note that it passes the handle value returned
from the "DRV_USART_BufferAdd" function (stored in the "usartBufferHandle" member of the global "appData" structure) into
the buffer status function to identify the buffer on which it wishes to check status. If the buffer status routine returns
"DRV_USART_BUFFER_COMPLETED", then the transfer has completed and the application transitions to the
"APP_STATE_IDLE" state where it stays and does nothing any time its "tasks" function is called. It's job is done! A more
complex application would go on to some other task or potentially begin the process again. But, this is a simple "Hello World"
sample application.
Note:
The application is normally initialized last, after all other modules in the system have been initialized. But, it should never assume
that any other module that it must call has completed its initialization when the application is initialized or when it's "tasks"
function is first called. Instead, it should always check the return value or status from any other module it calls to ensure that the
call succeeded before moving on to the next state. Following this rule makes applications more robust and allows then to handle
errors more effectively.
1.1.6 System Configurations
1.1.6.1 system_config.h
This topic describes the purpose of system configuration header file.
Description
System Configuration
In MPLAB Harmony, most library modules have a set of build time configuration options that define a variety of parameters (such
as buffer sizes, maximum or minimum limits, and default behavior). These configuration options normally have acceptable
default values. However, if you want to configure a library for your specific needs, its configuration options can be defined using
C-language pre-processor "#define" statements. The set of configuration options supported is described for each library in the
"Configuring the Library" section of its help document and most libraries provide a template and example configuration header
files in a "config" sub-folder under their "src" folder.
To obtain its build configuration options, every library includes the same common top-level configuration file that must be called
"system_config.h" and that must be defined as part of your application or, more specifically, as part of your system configuration.
The relative directory path to configuration directory that contains this file must be defined in the build properties of your project
so that the compiler can find it in it's include file search path.
Example Configuration "system_config.h" Header
// *****************************************************************************
// *****************************************************************************
// Section: Application Configuration
// *****************************************************************************
// *****************************************************************************
1.1 1. First Time Users MPLAB Harmony Help System Configurations
1-16
/* Define the size of the application's message buffer. */
#define APP_BUFFER_SIZE 15
#define APP_UART_BAUDRATE 9600
/* Define the application's "hello world" message string. */
#define APP_HELLO_STRING "Hello World\r\n"
// *****************************************************************************
// *****************************************************************************
// Section: System Services Configuration
// *****************************************************************************
// *****************************************************************************
/* Define the index for the driver we'll use. */
#define SYS_USART_DRIVER_INDEX DRV_USART_INDEX_0
/* Define the hardware (PLIB) index associted with this instance of the driver. */
#define SYS_USART_ID USART_ID_2
// *****************************************************************************
// *****************************************************************************
// Section: UART Driver Configuration
// *****************************************************************************
// *****************************************************************************
#define DRV_USART_INSTANCES_NUMBER 1
#define DRV_USART_CLIENTS_NUMBER 1
#define DRV_USART_INTERRUPT_MODE false
#define DRV_USART_XFER_BUFFER_NUMBER 10
#define DRV_USART_INTERRUPT_SOURCE_TX INT_SOURCE_USART_2_TRANSMIT
#define DRV_USART_CONFIG_BYTE_Q_SIZE_TX 1
#define DRV_USART_CONFIG_BYTE_Q_SIZE_RX 1
#define DRV_USART_CONFIG_BLOCK_DEVICE_MODE
#define DRV_USART_INTERRUPT_MODE false
#define DRV_USART_INSTANCES_NUMBER 1
#define DRV_USART_CLIENTS_NUMBER 1
#define DRV_USART_INTERRUPT_SOURCE_TX INT_SOURCE_USART_2_TRANSMIT
#define DRV_USART_INTERRUPT_SOURCE_RX INT_SOURCE_USART_2_RECEIVE
The example above defines configuration options for the application, system services, and USART driver used in the
"pic32mx_default" configuration of the sample project..
1.1.6.2 system_init.c
This topic describes the purpose of the system initialization file.
Description
In an MPLAB Harmony project, the "SYS_Initialization" function is called from the "main" function in order to initialize all modules
in the system. This function is implemented as part of a system configuration, normally in a file called "system_init.c". This file
may also include other necessary global system items that must be implemented in order to initialize a system such as processor
configuration bits and system-wide global data structures.
Example "system_init.c" File
// ****************************************************************************
1.1 1. First Time Users MPLAB Harmony Help System Configurations
1-17
// ****************************************************************************
// Section: Configuration Bits
// ****************************************************************************
// ****************************************************************************
#pragma config FPLLODIV = DIV_1, FPLLMUL = MUL_20, FPLLIDIV = DIV_2
#pragma config FWDTEN = OFF, FCKSM = CSECME, FPBDIV = DIV_1
#pragma config OSCIOFNC = ON, POSCMOD = XT, FSOSCEN = ON, FNOSC = PRIPLL
#pragma config CP = OFF, BWP = OFF, PWP = OFF
#pragma config ICESEL = ICS_PGx2
// *****************************************************************************
// *****************************************************************************
// Section: Driver Initialization Data
// *****************************************************************************
// *****************************************************************************
static DRV_USART_INIT uartInit =
{
/* System module initialization */
.moduleInit = {0} ,
/* Identifies USART hardware module (PLIB-level) ID */
.usartID = SYS_USART_ID ,
/* Operation Modes of the driver */
.operationMode = DRV_USART_OPERATION_MODE_RS232 ,
/* Flags for the usart initialization */
.initFlags = 0 ,
/* Control the line control configuration */
.lineControlMode = DRV_USART_LINE_CONTROL_MODE_8NONE1 ,
/* Baud Rate value to be used, if not using auto baud */
.brgValue = APP_UART_BAUDRATE ,
/* Operation mode initialization data */
.operationModeInit = {{0}},
/* Handshake Mode */
.handShakeMode = DRV_USART_HANDSHAKE_MODE_NONE ,
/* Interrupt Source for TX Interrupt */
.txInterruptSource = INT_SOURCE_USART_2_TRANSMIT ,
/* Interrupt Source for RX Interrupt */
.rxInterruptSource = INT_SOURCE_USART_2_RECEIVE ,
/* Interrupt Source for Error Interrupt */
.errorInterruptSource = INT_SOURCE_USART_2_ERROR,
/* Receive Queue length */
.rxQueueSize = 3,
/* Transmit Queue length */
.txQueueSize = 3
};
// *****************************************************************************
// *****************************************************************************
// Section: System Data
// *****************************************************************************
// *****************************************************************************
1.1 1. First Time Users MPLAB Harmony Help System Configurations
1-18
/* Structure to hold the sample application's system data. */
SAMPLE_SYSTEM_OBJECTS sysSample;
// ****************************************************************************
// ****************************************************************************
// Section: System Initialization
// ****************************************************************************
// ****************************************************************************
void SYS_Initialize ( void* data )
{
/* Inialize the system */
sysSample.usart = DRV_USART_Initialize(SYS_USART_DRIVER_INDEX, (SYS_MODULE_INIT
*)&uartInit );
/* Initialize the Application */
APP_Initialize ( );
}
In addition to the "SYS_Initialize" function implementation, the above example "system_init.c" file from the "pic32mx_default"
configuration of the "sample" project defines the processor configuration bits, a data structure used to initialize the USART driver,
and a global "sysSample" data structure used to hold a global handle to the USART driver object returned by the driver's
initialization function.
Notice that the "SYS_Initialize" function initializes first the driver, then the application. These are the only two active modules in
this system.
1.1.6.3 system_tasks.c
This topic describes the purpose of the system tasks file.
Description
Since MPLAB Harmony modules are state machine driven, they each have a "Tasks" function that must be called repeatedly
(from the system-wide "super" loop in "main" or from an ISR or OS thread). The "Tasks" functions are all called from the top-level
"SYS_Initialize" function that is normally implemented in a file called "system_tasks.c" that is part of a system configuration.
Example "system_tasks.c" File
void SYS_Tasks ( void )
{
/* Call the "tasks" functions for any modules in the system. */
DRV_USART_TasksTX(sysSample.usart);
/* Call the application's tasks routine */
APP_Tasks ( );
}
The "system_tasks.c" file for the "pic32mx_default" configuration of the "sample" project, contains only the implementation of the
"SYS_Tasks" function for that configuration. This function calls the USART driver's transmitter tasks function
"DRV_USART_TasksTX", passing in the driver's object handle returned from the driver's initialization routine, and it calls the
application's tasks function "APP_Tasks" to keep both the driver and the application's state machines running.
1.1.6.4 system_int.c
This topic describes the purpose of the system interrupts file.
1.1 1. First Time Users MPLAB Harmony Help System Configurations
1-19
Description
In an interrupt-driven configuration, any modules (such as drivers or system services) that can be driven from an interrupt must
have their interrupt-capable tasks function(s) called from an Interrupt Service Routine (ISR) "vector" function instead of from the
"SYS_Tasks" function. The form of the definition of the ISR vector function is dependent on what type of PIC microcontroller on
which the system is running. So, any vector functions required are normally implemented as part of the a specific system
configuration in a file normally called "system_int.c"
Example "system_int.c" File
void __ISR ( _UART_2_VECTOR ) _InterruptHandler_USART_2_stub ( void )
{
if ( SYS_INT_SourceStatusGet ( APP_USART_INT_SOURCE_TX ) )
{
/* Call the USART driver's "Tasks" routine */
DRV_USART_TasksTX ( sysSample.usart );
}
}
Notice that, in this example, the ISR function must determine if the interrupt occurred because of a transmitter (TX) interrupt
because on the PIC32 part used by this configuration of the application, this interrupt vector is shared with other types of
interrupts for this USART. Once it has determined that the interrupt is indeed a transmitter interrupt, the ISR calls the USART
driver's TX tasks routine and passed in the USART object handle returned from the driver's initialization function.
Note: The USART driver's "DRV_USART_TasksTX" function is interrupt capable when the USART driver is built with the correct
configuration options.
1.1.7 More Information
Describes what is available from the MPLAB Harmony web page.
Description
Information on MPLAB Harmony is available from microchip.com/harmony.
From this landing page, information on additional downloads, links to a MPLAB Harmony discussion forum, among others is
available.
1.1 1. First Time Users MPLAB Harmony Help More Information
1-20
1.2 2. Creating Your Own Applications
This section describes the steps necessary to create your own MPLAB Harmony applications.
Description
To support the framework, the application (or MPLAB Harmony "system") is responsible for the following:
1. Create a New Project: This can be accomplished by either running the MPLAB X IDE new project wizard or copying and
using a basic template located in the /apps/examples/templates directory. If you copy the template to a new
location, you may be required you to modify your include paths. To use the project wizard, select Microchip Embedded >
Standalone Project. Next, choose the device. The device you choose will determine what peripheral libraries are included in
your MPLAB Harmony project. Continue in the new project Wizard, selecting your hardware and software tools. When you
name and locate your project, there are two choices: 1) You can locate it in the ‘apps’ folder of the MPLAB Harmony
installation or 2) You can locate it outside of the Harmony installation. Placing the project in the ‘apps’ folder of MPLAB
Harmony will require you to copy it if you install a new version of MPLAB Harmony. Installing your project outside of the
MPLAB Harmony installation will require you to modify your include paths when a new version of MPLAB Harmony is
installed. It is recommend to use relative paths when installing in the ‘apps’ folder in MPLAB Harmony. Make sure that your
new project is set to the main (active) project.
2. Determine which MPLAB Harmony Modules are needed for your Application: Modules are divided into four categories;
Peripheral Libraries, System Services, Device Drivers and other libraries (commonly called middleware). To determine your
needs, read the MPLAB Harmony Overview and the Introductory sections for the modules of interest. Some modules have
dependencies while others do not. Peripheral Libraries have no dependencies. Drivers depend on peripheral libraries. System
Services depend on Peripheral Libraries and or Drivers. Your application or its middleware will typically use drivers or system
services.
3. Add the required Module Source Files to your Project: This can be accomplished by reading the help for each module to
determine what source files you need and manually entering them into your project. Alternatively, the MPLAB Harmony
Configurator can be used to select the modules from a list or tree and it will automatically insert the source files into your
project and optionally generate a skeletal template for your project. Note that some modules have multiple implementations
each optimized for different purposes. Others may implement optional features in multiple files. Be sure to select the source
file right for your implementation and be sure to include the pre-built peripheral library binary “.a” file for the processor you
selected in your project.
4. Configure The Modules: With the exceptions of the Peripheral Libraries, every MPLAB Harmony module will require some
set of build time configuration options implemented using ‘c’ language macros ‘#define’. Descriptions of the supported options
are available in the "Configuring the Library" section in the help document for every MPLAB Harmony library. These options
must be defined in the system_config.h header that is part of your project template generated by the MPLAB Harmony
Configurator. Every MPLAB Harmony source file that supports build time configuration options will include this header. As
such, this file must be part of every MPLAB Harmony Project.
5. Initialize System: This task involves completing the system_init.c file. First add the necessary configuration bits for your
processor. These are defined in the Special Features section of your device's data sheet. The next step is to complete the
SYS_Initialize function. Finish any necessary processor initialization (wait states, cache control, etc.) MPLAB Harmony may
provide services to accomplish this in the System Services Module. Initialize any features specific to the board that are not
initialized by other modules such as drivers or system services. Next, initialize all library modules selected in step 2 above
used by your application. To do this you must first define the initialization data structure for each module. This can be done
statically in the system_init.c file and passed in by pointer to the appropriate initialization function for each library. Needed
initialization structures can be found in the help section for each module. Add a call to the initialization function for each library
module into the SYS_Initialize function. Each initialization function will return an object handle for the module instance. These
should be captured so that they can be passed to the module task routine. Finally, add the call to APP_Initialize function into
the SYS_Initialize function.
6. Call System State Machine Tasks: The system must call the various task state machine functions at appropriate times. This
is accomplished by either adding the call into the SYS_Tasks function for polled modules or adding the call to the interrupt
handler for interrupt driven modules. The object handle saved during the initialization process is used as an argument for the
various task state machine functions. The SYS_Tasks function is typically implemented in the system_tasks.c file while the
interrupt handlers are defined in the system_int.c file.
1.2 2. Creating Your Own Applications MPLAB Harmony Help
1-21
7. Develop Application State Machine: You are now ready to develop your application. Since Harmony is based on
cooperative state machines, your application should also be state machine driven. At minimum, the APP_Initialize function
must put your application in its initial state. It may perform other initialization as long as it does not have to wait for other
modules. Any initialization that depends on other modules should be implemented as part of the application state machine.
Finally, complete your application functionality by implementing the APP_Tasks state machine function.
1.2 2. Creating Your Own Applications MPLAB Harmony Help
1-22
1.3 3. Release Notes & Information
This section contains release notes for this release and information on version numbers and release types.
1.3.1 Release Notes
Release notes for MPLAB Harmony v0.70b. Target Release Date: November 18, 2013.
Description
Please refer to Release Contents for a complete list of modules that are provided in this release.
MPLAB Harmony is a framework of system services, device drivers, and other libraries that are built upon a base of portable
peripheral libraries to provide flexible, portable, and consistent software “building blocks” which you can use to develop your
embedded PIC32 applications.
This is the first fully public release of MPLAB Harmony. Previous releases were internal to Microchip and had very limited
external distribution.
A complete list of the contents of this release is provided in the Release Contents section. You can find these contents under the
installation folder you selected in the following sub-folders:
• “apps” – Contains all demo and example applications provide with this installation.
• “bin” – Contains pre-built binary libraries (“.a” files) for the MPLAB Harmony peripheral libraries for each supported processor
and for key libraries provided in binary form.
• “bsp” – Contains MPLAB Harmony board support packages provided for selected Microchip demo and development boards.
• “build” – Provides MPLAB X IDE projects that you can use to re-build the libraries provide under the “bin” folder (in case you
want to use different build settings).
• “doc” – Contains the MPLAB Harmony help documentation in PDF and MPLAB X IDE “.nbm” plug-in formats.
• “framework” – Contains source code and API headers for all MPLAB Harmony libraries that are provided in source form.
• “third_party” – Contains MPLAB Harmony compatible libraries and Real-Time Operating Systems (RTOS) provided with this
installation.
• “utilities” – Contains design and development utilities and MPLAB X IDE plug-in utilities provided with MPLAB Harmony.
Please review the following key help topics (and their subtopics) to gain an initial understanding of what MPLAB Harmony is and
how to use it.
• Start Here > First Time Users
• Start Here > Creating your Own Applications
• MPLAB Harmony Configurator Help
• The “Introduction” sections of the individual help topics for the system services, drivers, and libraries that are of interest to you
• Applications Help > Applications Overview
• The “Introduction” sections of the individual applications help topics
Once you have a basic understanding of MPLAB Harmony, you can begin using the provided demo and example applications to
explore it’s capabilities and begin developing your own applications.
1.3 3. Release Notes & Information MPLAB Harmony Help Release Notes
1-23
Before developing your own applications, be sure to look at the example “template” application provided in the
“/apps/examples/templates” folder.
The following sections provide a brief overview of items that are new in this release and known issues at the time of the release.
Refer to the “Release Notes” section under the help topic for each individual library, application, or utility for additional details.
Refer to the “Using the Library” section for each individual library for a description of how to use library functions to accomplish
the tasks that the library was intended to support.
Refer to the “Library Interface” section for each individual library for a programmer’s reference or dictionary of functions and data
types defined by that library’s interface.
New This Release:
• Significant SD Card Driver improvements.
• The SPI driver has had configuration and interoperability improvements.
• The NVM driver now handles sector erasing during writes.
• USB Driver demonstrations
• TCP/IP Stack updates (see the TCP/IP Stack Library Help)
• Graphics Library API has been updated
• File System Service Library has been updated
• The following System Services have been added: Clock and Device Control
• USART Driver has been updated
• USB Driver has been updated
• Peripheral Libraries now support PIC32MZ devices
• FreeRTOS now supports PIC32MZ devices
• CyaSSL Library has been added
Known Issues:
• The SD Card driver has had limited testing and is missing a few desired features
• The SPI driver does not support slave mode or DMA
• The NVM driver has only been tested in it’s current memory configuration
• NVM Driver demonstration has limited testing
• SPI Driver demonstration has limited testing and hardware support
• USART Driver demonstration does not support PIC32MZ devices
• USB demonstrations (see the related Release Notes)
• USB Host Stack has limited testing and functional limitations (see the related Release Notes)
• USB Device Stack has limited testing and functional limitations (see the related Release Notes)
• No multi-display support for the Graphics Primitive Library
• File System Service Library does not support MIP16 mode, has limited testing and functional limitations (see the related
Release Notes)
• USART Driver has flow control and parity mode limitations and no multi-client support
• MRF24W Wi-Fi Driver Library has limited demonstration support and testing (see the related Release Notes)
1.3 3. Release Notes & Information MPLAB Harmony Help Release Contents
1-24
1.3.2 Release Contents
This topic lists the contents of this release and identifies the individual version numbers of each module.
Description
This table lists the contents of this release, including a brief description of each module.
Cryptographic Applications:
/apps/crypto/
Crypto Demonstration Crypto Library Demonstration 1.00
Example Applications:
/apps/examples/
peripheral/blocking/pic32mz Simple blocking PLIB examples. 1.00
peripheral/blocking/pic32mx Simple blocking PLIB examples 1.00
state_driven Simple MPLAB Harmony compliant state-driven Peripheral Library
examples
1.00
sample Sample “Hello World” demonstration used in “Getting Started” guide in
Help system
N/A
DEMOS: Driver Application demos:
/apps/driver/
nvm demo NVM demonstration application 1.00
usart demo USART demonstration application 1.00
spi demo SPI demonstration application 1.00
DEMOS : RTOS Application demos:
/apps/rtos/
freertos FreeRTOS demonstration application 1.00
openrtos OpenRTOS demonstration application 1.00
File System Applications:
/apps/fs/
nvm_fat_single_disk Single-disk Non-Volatile Memory FAT FS Demonstration 1.00
nvm_sdcard_fat_multi_disk Multi-disk Non-Volatile Memory FAT FS Demonstration 1.00
sdcard_fat_single_disk SD Card FAT Disk demonstration 1.00
nvm_mpfs_single_disk Single-disk Non-Volatile Memory 1.00
nvm_sdcard_fat_mpfs_multi_disk Multi-disk Non-Volatile Memory FAT MPFS Demostration 1.00
DEMOS: Graphics Applications:
/apps/gfx/
lcc Low-Cost Controllerless Graphics Demonstration 4.00b
object Graphics Object Layer Demonstration 4.00b
primitive Graphics Primitives Layer Demonstration 4.00b
s1d13517 Epson S1D13517 LCD Controller Demonstration 4.00b
ssd1926 Solomon Systech SSD1926 Controller Demonstration 4.00b
1.3 3. Release Notes & Information MPLAB Harmony Help Release Contents
1-25
DEMOS: TCP/IP Applications &
Utilities: /apps/tcpip/
tcpip_web_server TCP/IP Web Server Demonstration 1.01
bsd_tcp_server TCP/IP BSD Server Demonstration 1.00
bsd_tcp_client TCP/IP BSD Client Demonstration 1.00
bsd_udp_server TCP/IP BSD Server Demonstration 1.00
bsd_udp_client TCP/IP BSD Client Demonstration 1.00
tcpip_tcp_server TCP/IP TCP Server Demonstration 1.00
tcpip_tcp_client TCP/IP TCP Client Demonstration 1.00
tcpip_udp_server TCP/IP UDP Server Demonstration 1.00
tcpip_udp_client TCP/IP UDP Client Demonstration 1.00
wolf_ssl wolf ssl Demonstration 1.00
wifi_console TCP/IP Wi-Fi Console Demonstration
wifi_easyconf TCP/IP Wi-Fi Easy Configuration Demonstration
DEMOS: USB Device (Function)
Applications:
/apps/usb/device/
audio_speaker USB Audio Device Speaker Demonstration 1.00
cdc_com_port_dual CDC Dual Serial COM Ports Emulation Demonstration 1.00
cdc_com_port_single CDC Single Serial COM Port Emulation Demonstration 1.00
generic_device Microchip Generic USB Device Demonstration 1.00
hid_basic Basic USB Human Interface Device (HID) Demonstration 1.00
hid_joystick USB HID-Class Joystick Device Demonstration 1.00
hid_keyboard USB HID-Class Keyboard Device Demonstration 1.00
hid_mouse USB HID-Class Mouse Device Demonstration 1.00
msd_basic USB Mass Storage Device Demonstration 1.00
cdc_serial_emulator CDC Serial Emulation Demonstration 1.00
DEMOS: USB Host Applications:
/apps/usb/host/
msd_simple_thumb_drive USB MSD Host Simple Thumb Drive Demonstration 1.00
cdc_basic USB CDC Basic Demonstration 1.00
cdc_serial USB CDC Serial Demonstration 1.00
hid_keyboard USB HID-Class Joystick Host Demonstration 1.00
hid_mouse USB HID-Class Mouse Host Demonstration 1.00
generic_device Microchip Generic USB Host Demonstration 1.00
Pre-built Binaries: /bin/
framework/peripheral Pre-built Peripheral Libraries 1.00
framework/math/dsp Pre-built DSP libraries for PIC32MZ devices 1.00
framework/math/libq Pre-built fixed-point math libraries for PIC32MZ devices 1.00
1.3 3. Release Notes & Information MPLAB Harmony Help Release Contents
1-26
Board Support Packages (BSPs):
/bsp/
explorer16/pic32mx795f512l Explorer 16 Development Board and PIC32MX795F512L PIM 1.00
sk_pic32_mx_usb PIC32 USB Starter Kit 1.00
sk_pic32_mz PIC32MZ Embedded Connectivity (EC) Starter Kit 1.00
usb_audio_pic32mx PIC32 USB Starter Kit II 1.00
gfx Graphics (GFX) boards 1.00
Documentation: /doc
doc/org-microchip-harmony_help.nbm MPLAB Harmony Help MPLAB X IDE Plug-In 0.70b
doc/harmony_help.pdf MPLAB Harmony Help 0.70b
Middleware & Libraries:
/framework/
Crypto (Software) Microchip Cryptographic Libraries 1.00
GFX Graphics Library 4.00b
MATH/DSP API header for PIC32MZ DSP Libraries 1.00
MATH/LIBQ API header for PIC32MX fixed-point libraries 1.00
AAC/MP3 Audio Decoder Libraries 1.00
TCP/IP TCP/IP Network Stack 7.10
USB Host USB Host Stack 0.02b
USB Device USB Device Stack 0.05b
Device Drivers:
/framework/driver/
adc Analog-to-Digital Converter Driver 0.01b
ethmac Ethernet Media Access Controller Driver 7.10
ethphy Ethernet Physical Interface Driver 7.10
gfx/gfx_lcc Low-Cost Controllerless Graphics Driver 4.00b
gfx/gfx_otm2201a OTM LCD Controller Driver 4.00b
gfx/gfx_s1d13517 Epson S1D13517 LCD Controller Driver 4.00b
gfx/gfx_ssd1926 Solomon Systech SSD1926 Controller Driver 4.00b
nvm Non-Volatile Memory Driver 0.50b
pmp Parallel Master Port Driver 0.50b
sdcard SD Card Driver (Client of SPI Driver) 0.50b
spi Serial Peripheral Interface (SPI) Driver 0.50b
tmr Timer Driver 0.50b
usart Universal Synchronous/Asynchronous Receiver/Transmitter (USART)
Driver
0.50b
usb/usbhs Universal Serial Bus (USB) Controller Driver 0.05b
wifi/mrf24w Wi-Fi MAC driver for the MRF24W controller 3.0.0
1.3 3. Release Notes & Information MPLAB Harmony Help Release Contents
1-27
Operating System Abstraction Layer
(OSAL): /framework/osal
osal.h OSAL Interface 0.52b
osal_freertos.h
osal_freertos.c
OSAL Implementation for FreeRTOS 0.52b
osal_openrtos.h
osal_openrtos.c OSAL Implementation for OpenRTOS
0.52b
osal_impl_basic.h OSAL “bare metal” (no OS) implementation 0.52b
osal_imple_none.h OSAL implementation that removes the OSAL when not used 0.52b
osal_ucos3.h
osal_ucos3.c
OSAL Implementation for Micrium µCOS-III 0.52b
osal_ucos2.h
osal_ucos2.c
OSAL Implementation for Micrium µCOS-II N/A
osal_threadx.h OSAL Implementation for Express Logic ThreadX N/A
osal_threadx.c N/A
Peripheral Libraries: /
framework/peripheral Peripheral Library Source Code for all Supported PIC32 Processors 0.70b
Build Framework:
/build/framework/
crypto/test Test Vector App for crypto/zlib 1.00
crypto/zlib zlib library 1.00
crypto/crypto crypto library 1.00
peripheral Peripheral Library build project 1.00
math/libq libq library build project 1.00
math/DSP DSP library build project 1.00
System Services:
/framework/system/
clk Clock Services Library 0.04a
common Common Services 0.02a
devcon Devcon Services Library 0.02b
fs File System Services Library 0.50b
int Interrupt Services Library 0.04a
msg Message Services Library 0.01a
ports Input/Output Ports Services Library 0.02b
tmr Software Timer Services Library 0.02a
wdt Watchdog Timer Services Library 0.02b
Third-Party Software:
/third_party/
1.3 3. Release Notes & Information MPLAB Harmony Help Release Contents
1-28
rtos/FreeRTOSV7.5.2 FreeRTOS Source Distribution v7.5 with support for PIC32MZ devices Yes
(Vendor
Version)
rtos/FreeRTOSVX.XX.XX FreeRTOS Source Distribution v7.5 with support for PIC32MX devices Yes
(Vendor
Version)
rtos/OpenRTOSVx.x.x OpenRTOS Source Distribution vx.x.x with support for PIC32MZ
devices
Yes
(Vendor
Version)
rtos/OpenRTOSVx.x.x OpenRTOS Source Distribution vx.x.x with support for PIC32MX
devices
Yes
(Vendor
Version)
uC/OS-III Micrium uC/OS-III Binary Demonstration with support for PIC32MZ
devices
Yes
(Vendor
Version)
uC/OS-III Micrium uC/OS-III Binary Demonstration with support for PIC32MX
devices
Maybe
(Vendor
Version)
uC/OS-II Micrium uC/OS-II Binary Demonstration (PIC32MZ)
uC/OS-II Micrium uC/OS-II Binary Demonstration (PIC32MX)
ThreadX Express Logic (ThreadX) Demonstration with Support for PIC32MZ
devices
CyaSSL Embedded SSL Library Open Source based demonstration 2.8.0
(Vendor
Version)
CyaSSL Embedded SSL Library Open Source based demonstration Yes
(Vendor
Version)
InterNiche Technologies, Inc. Suitable TCP/IP demonstrations Yes
(Vendor
Version)
Utilities: /utilities/
MPLAB Configurator MPLAB Harmony Project/Library Configurator MPLAB X IDE Plug-In 0.02a
gfx/gdd Graphics Display Designer 2.00b
gfx/grc Graphics Resource Compiler 4.00.39
mib2bib/mib2bib.jar Compiles Custom Microchip MIB script (snmp.mib) to generate
snmp.bib and mib.h
2.00
mpfs_generator/mpfs2.jar TCP/IP MPFS File Generator and Upload Utility 2.02.06
tcpip_discoverer/tcpip_discoverer.jar TCP/IP Microchip Node Discoverer Utility 2.00
1.3.3 Version Numbers
This section describes the version numbers and their meaning.
1.3 3. Release Notes & Information MPLAB Harmony Help Version Numbers
1-29
Description
MPLAB Harmony Version Numbering Scheme
Libraries released with MPLAB Harmony each have their own version number, using the following scheme.
.[.<“dot”>][]
• Major revision (architecture or paradigm shift)
• Minor revision (new features, regular releases)
• “Dot” release (bug fixes, unscheduled releases)
• Release Type (‘a’ = alpha, ‘b’ = beta, Full release versions 1.0 or above have no type letter)
Items in square brackets are only present when needed (see examples, below).
Examples:
• MPLAB Harmony USB Library v2.6 (“dot” of ‘0’ implied)
• MPLAB Harmony Graphics Library v1.12.02
Note: The version number of the over all MPLAB Harmony release is not related to the version numbers of each individual
library or module included in the release and has no bearing on the versions of any libraries it includes. It is merely a way to keep
track of what libraries (and what versions of what libraries) are included in each release. Refer to the current release notes to
identify what libraries are included and what their version numbers are.
1.3.4 Release Types
This section describes the release types and their meaning.
Description
MPLAB Harmony module releases can be of three different types, based on the version type.
Alpha Release
An alpha release version of a module is usually an initial release. Alpha releases will have complete implementations of their
basic feature set, they are unit tested (usually by the original developer) and will build correctly in their basic configuration. An
1.3 3. Release Notes & Information MPLAB Harmony Help Release Types
1-30
alpha release is a great "preview" of what a new development Microchip is working on and it can be very helpful for exploring
new features. However, it has not gone through a formal test process and it is almost certain that some of its interface will
change before the full version is released. It is not recommended for production use.
Beta Release
A beta release version of a module has gone through the internal interface review process and has had formal testing of its
functionality. Also, issues reported from the alpha release will have been fixed or documented. When a module is in a beta
version, you can expect it to function correctly in normal circumstances and you can expect that its interface is very close to the
final form (although changes can still be made if required). However, it has not had stress testing or been tested and it may not
fail gracefully if used incorrectly. A beta release is not recommended for production use, but it can be used for development.
1.0+ Release
By the time a module is released as a 1.0 version or above, it is feature complete, fully tested, and its interface is "frozen". All
known issues from previous releases will have been fixed or documented. The existing interface will not change in future
releases. It may be expanded with additional features and additional interface functions, but existing interface functions will not
change. This is stable code with a stable Application Program Interface (API) that you can rely on for production purposes.
1.3 3. Release Notes & Information MPLAB Harmony Help Release Types
1-31
1.4 4. Previous Releases
This topic contains information about past version(s) of MPLAB Harmony.
1.4.1 v0.51.03b
Release notes for MPLAB Harmony v0.51.03b.
Description
This topic contains the release notes for MPLAB Harmony v0.51.03b. Please refer to the Release Contents topic for a complete
list modules that are provided in this release.
This release will support MPLAB X IDE v1.95 and XC32 v1.30 tc9 and above.
New this Release
• Updated the Documentation
• Updated Peripheral Pre-Built Binary Libraries (".a" files)
• Added IPv6 API for generation of the Unique Local Address (ULA)
Known Issues
1. No documentation available for the Crypto libraries and peripheral libraries example applications.
2. For TCP/IP stack running on PIC32MZ platforms the write-back mode is not supported yet. Write-through has to be used for
now.
3. Early samples of the PIC32MZ silicon do not have a factory pre-programmed MAC address. This will cause the TCP/IP stack
and related applications to not properly run in most network configuration. Manual update of the related "network_config.h" file
with a valid MAC address is required.
4. The Wi-Fi driver for the TCP/IP stack and the supporting demos are not part of this release.
This table lists the contents of this release, gives a brief description
Module Description Version
File System Applications:
/apps/fs/
nvm_fat_single_disk Single-disk Non-Volatile Memory FAT FS Demonstration 0.02a
nvm_sdcard_fat_multi_disk Multi-disk Non-Volatile Memory FAT FS Demonstration 0.02a
sdcard_fat_single_disk SD-Card FAT Disk Demonstration 0.02a
nvm_mpfs_single_disk Single-disk Non-Volatile Memory MPFS Demonstration 0.02a
nvm_sdcard_fat_mpfs_multi_disk Multi-disk Non-Volatile Memory FAT MPFS Demonstration 0.02a
Graphics Applications:
/apps/gfx/
lcc Low-Cost Controllerless Graphics Demonstration 0.51b
object Graphics Object Layer Demonstration 0.51b
1.4 4. Previous Releases MPLAB Harmony Help v0.51.03b
1-32
primitive Graphics Primitives Layer Demonstration 0.51b
ssd1926 Solomon Systech SSD1926 Controller Demonstration 0.51b
TCP/IP Applications & Utilities:
/apps/tcpip/
tcpip_web_server TCPIP Web Server Demonstration 7.02a
utilities/mpfs_generator/mpfs2.jar TCP/IP MPFS File Generator and Upload Utility 2.2.5
utilities/tcpip_dicoverer/tcpip_discoverer.jar TCP/IP Microchip Node Discoverer Utility 2.0
utilities/mib2bib/mib2bib.jar Compiles Custom Microchip MIB script ( snmp.mib) to generate
snmp.bib and mib.h
2.0
USB Device (Function) Applications:
/apps/usb/device/
audio_speaker USB Audio Device - Speaker Demonstration 0.51b
cdc_com_port_dual CDC Dual Serial COM Ports Emulation Demonstration 0.51b
cdc_com_port_single CDC Single Serial COM Ports Emulation Demonstration 0.51b
generic_device Generic USB Device Demonstration 0.51b
hid_basic USB Human Interface Device (HID) Demonstration 0.51b
hid_joystick USB HID Joystick Device Demonstration 0.51b
hid_keyboard USB HID Keyboard Device Demonstration 0.51b
hid_mouse USB HID Mouse Device Demonstration 0.51b
msd_basic USB Mass Storage Device Demonstration 0.51b
USB Host Applications:
/apps/usb/host/
cdc_serial USB CDC Host Demonstration 0.51b
Crypto Applications: /apps/
crypto Wolf SSL Cryptographic Demonstration 0.01a
PIC32MZ Applications: /apps/
pic32mz PIC32MZ Device Demonstration 0.51.01b
Example Applications:
/apps/examples
peripheral Peripheral Demonstration 0.51b
sample Sample Demonstration 0.51b
Board Support Packages
(BSPs): /bsp/
explorer16/pic32mx795f512l Explorer 16 Development Board and PIC32MX795F512L PIM
pic32_sk/pic32_usb_sk PIC32 USB Starter Kit
pic32_sk\pic32mz_sk PIC32MZ Starter Kit
pic32mx_usb_audio PIC32 USB Digital Audio Accessory Board
Third Party
Software: /third_party/
rtos/FreeRTOSV7.5.0 FreeRTOS Source Distribution v7.5.0 7.5.0
Middleware: /framework/
1.4 4. Previous Releases MPLAB Harmony Help v0.51.03b
1-33
gfx Graphics Library 0.51b
tcpip TCP/IP Network Stack 7.02a
usb USB Host & Device Stack 0.51b
Crypto Library: /framework/
crypto Wolf SSL Cryptographic Libraries 0.01a
System Services:
/framework/system/
clk Clock Services Library 0.03a
debug Debug Services Library 0.01a
fs File System Services Library 0.02a
int Interrupt Services Library 0.03a
msg Message Services Library 0.01a
ports Input-Output Ports Services Library 0.01a
reset System Reset Services Library 0.01a
tmr Software Timer Services Library 0.01a
wdt Watchdog Timer Services Library 0.01a
Device Drivers:
/framework/driver/
adc Analog-to-Digital Converter Driver 0.01a
ethmac Ethernet Media Access Controller Driver 0.03a
ethphy Ethernet Physical Interface Driver 0.03a
gfx/gfx_lcc Low-Cost Controllerless Graphics Driver 0.51b
gfx/gfx_s1d13517 Epson S1D13517 LCD Controller Driver 0.51b
gfx/gfx_ssd1926 Solomon Systech SSD1926 Controller Driver 0.51b
nvm Non-Volatile Memory Driver 0.01a
pmp Parallel Master Port Driver 0.01a
sdcard SD Card Driver (Client of SPI Driver) 0.01a
spi Serial Peripheral Interface (SPI) Driver 0.01a
tmr Timer Driver 0.01a
usart Universal Synchronous/Asynchronous Receiver/Transmitter
(USART) Driver
0.01a
usb Universal Serial Bus (USB) Controller Driver 0.51b
usbhs Hi-Speed USB Controller Driver 0.51b
wifi Wi-Fi Driver 0.01a
Peripheral Libraries (PLIBs): /
framework/peripheral Peripheral Library Source Code 0.51b
bin/framework/peripheral Peripheral Pre-Built Binary Libraries for all PIC32 Processors 0.51b
build/framework/peripheral Project used for Peripheral Library Prebuilt Binary Libraries
Creation
0.51b
1.4 4. Previous Releases MPLAB Harmony Help v0.51.03b
1-34
Operating System Abstraction Layer
(OSAL): /framework/osal/
osal.h
osal.c
OSAL interface 0.51b
osal_impl_none.h OSAL implementation that removes the OSAL when not used 0.51b
osal_impl_basic.h OSAL "bare metal" (no OS) implemenrtation 0.51b
osal_freertos.h
osal_freertos.c
OSAL implementation for FreeRTOS 0.51b
osal_ucos.h
osal_ucos.c
OSAL implementation for Micrium uCOS-III 0.51b
1.4 4. Previous Releases MPLAB Harmony Help v0.51.03b
1-35
1.5 5. Tips and Tricks
This topic provides a few helpful tips and tricks to keep in mind while developing your MPLAB Harmony projects.
Description
You may find the following MPLAB Harmony "tips" and "tricks" helpful when developing your own MPLAB Harmony projects.
1. After creating a new MPLAB X IDE project, use the project wizard to add MPLAB Harmony libraries to your project and create
a set if initial files for your project. After that, your job is to ensure that the necessary initialization and configuration data and
definitions are in place and to write your own application.
2. You can use MPLAB Harmony example and demo projects to put together a "first approximation" of your application.
1. Copy the source files from the various example or demo apps to your project.
2. Rename the "APP_Initialize" and "APP_Tasks" functions so that they are all different and will build in your application by
simply appending a descriptive name to the end of the existing function names. (Note: you may also need to rename any
global data "objects" that conflict with each other from the examples).
3. Call the individual "APP_Initialize" and "APP_Tasks" functions from the "SYS_Initialize" and
"SYS_Tasks" functions in your application's configuration files.
4. Use the project wizard to add any required drivers, services, or middleware.
5. At this point, you now have your application made out of several independent state machines. Now, you can begin to
develop your own custom application code and modifying any of the code copied from the provided applications to behave
as you desire.
1.5 5. Tips and Tricks MPLAB Harmony Help
1-36
1.6 6. Glossary
This section contains a glossary of general MPLAB Harmony terms.
Description
Glossary of Harmony Terms
Term Definition
Application One or more application modules define the over all behavior of an MPLAB Harmony system. Applications are
either demonstrations or examples provided with the installation or are implemented by you, using MPLAB
Harmony libraries to accomplish a desired task.
Client A client module is any module that uses the services (calls the interface functions) of another module.
Configuration An MPLAB Harmony configuration consists of static definitions (C-language "#define" statements), executable
source code, and other definitions in a set of files that are necessary to create a working MPLAB Harmony
system. (See Start Here for additional information.)
Configuration
Options
Configuration options are the specific set of "#define" statements that are required by any specific MPLAB
Harmony library to specify certain parameters (such as buffer sizes, minimum and maximum values, etc.) build
that library. Configuration options are defined in the "system_config.h" system-wide configuration header.
Driver A "driver" (AKA device driver) is an MPLAB Harmony software module designed to control and provide access
to a specific peripheral, either built into the microcontroller or external to it.
Driver Index Dynamic MPLAB Harmony drivers (and other dynamic modules) can manage the more than one instance of the
peripheral (and other resources) that they control. The "driver index" is a static index number (0, 1, 2,...) that
identifies which instance of the driver is to be used.
Note: The driver index is not necessarily identical to the peripheral index. The association between these two is
made when the driver is initialized.
Driver
Instance
An instance of a driver (or other module) consists of a complete set of the memory (and other resources)
controlled by the driver's code. Selection of which set of resources to control is made using a driver index.
Note: Even though there may be multiple instances of the resources managed by a dynamic driver, there is only
ever one instance of the actual object code. However, static drivers always maintain a 1:1 relationship between
resource and code instances.
Framework The MPLAB Harmony framework consists of a set of libraries (and the rules and conventions used to create
those libraries) that can be used to create MPLAB Harmony systems.
Initialization
Overrides
Initialization overrides are configuration options that can be defined to statically override (at build time)
parameters that are normally passed into the "Initialize" function of a driver or other MPLAB Harmony module.
This mechanism allows you to statically initialize a module, instead of dynamically initializing the module.
Interface The interface to a module is the set of functions, data types, and other definitions that must be used to interact
with that module.
Middleware The term "middleware" is used to describe any software that fits between the application and the device drivers
within an MPLAB Harmony system. It is something of a catch all term that is loosely used to describe libraries
that use drivers to access peripheral and then implement communication protocols (such as TCP/IP, USB
protocols, and graphics image processing) and other more complex processing that is required to use certain
peripherals, but is not properly part of controlling the peripheral itself.
Module An MPLAB Harmony software module is a closely related group of functions controlling a related set of
resources (memory and registers) that can be initialized and maintained by the system. Most MPLAB Harmony
modules provide an interface for client interaction. However, "headless" modules with no interface are possible.
1.6 6. Glossary MPLAB Harmony Help
1-37
Peripheral
Index
A peripheral index is a static label (usually an C-language "enum" value) that is used to identify a specific
instance of a peripheral.
Note: Unlike a driver index, which always starts at '0', a peripheral index may be internally represented as any
number, letter, or even a base address and the user should not rely on the value itself - only the label.
Peripheral
Instance
An instance of a peripheral is a complete set of the registers (and internal physical resources) necessary to
provide the core functionality of a given type of peripheral (either built into the microcontroller or external to it).
Note: A specific peripheral instance is identified using a peripheral index.
System An MPLAB Harmony system is a complete set of libraries, applications, and configuration items loaded and
executing on a specific hardware platform (microcontroller, board, and external peripherals) or the source items
necessary to build such a system.
Note: Since a system can multiple configurations, one MPLAB Harmony project may support multiple systems
through multiple supported configurations. See the demo applications included in the installation for examples.
System
Service
A system service is an MPLAB Harmony module that provides access to and/or control of common system
resources (memory and registers) with which other modules (drivers, middleware, libraries and application) may
interact.
Note: System services, much like drivers, manage sharing of resources so as to avoid conflicts between
modules that would otherwise occur if each module attempted to manage the share resource itself. But, unlike
drivers, system services do not normally need to be "opened" in order to use them.
1.6 6. Glossary MPLAB Harmony Help
1-38
2 MPLAB Harmony Configurator Help
2 MPLAB Harmony Help
2-39
2.1 MPLAB Harmony Configurator
2.1.1 Introduction
This topic provides an overview of the MPLAB Harmony Configurator.
Description
The MPLAB Harmony Configurator is a MPLAB X IDE plug-in. It must be installed into your MPLAB X IDE installation to be used.
2.1.2 Release Notes
MPLAB Harmony Version: v0.70b Release Date: 18Nov2013
Description
====================================
Version 0.02a
MPLAB Harmony Configurator Plug-in
November 2013
====================================
Operating System Support
MPLAB Harmony Configurator Plug-in was tested on the following operating systems:.
• Windows XP SP3 and Windows 7
• Linux OS - Ubuntu
• Mac OS v8
Supported Features:
• Provides a simple hierarchical way for users to select the MPLAB Harmony modules to be used in the project and adds the
selected module source files with the necessary configuration and project settings (include path) into the created MPLAB X
IDE project.
• Supports importing project related files from relative path.
• Adds predefined source and header template files to the MPLAB X IDE project.
• Library Configuration is supported only for the TCP/IP and USB libraries.
Unsupported Features:
• System-related API calls are not added automatically to the system_init.c, main.c, and system_tasks.c files. Only the standard
C templates are added to the project. The application code must be added by the user in the application source and header
2.1 MPLAB Harmony Configurator MPLAB Harmony Help Release Notes
2-40
files for a successful compilation of the project.
• Library Configuration is not supported for the Graphics library, OSAL, Drivers and Third-Party libraries. However, the
corresponding source and header files of the selected modules could be added to the created MPLAB X IDE project using this
Configurator.
Notes for Users:
1. The terms "MPLAB Configurator" and "MPLAB Configuration Wizard" are used interchangeably throughout the MPLAB
Harmony Help.
2. Check for "TODO" tags that are placed in added template files for directions on what sections in the code should be modified
or code to be added by the user. Look for system_config.h, system_init.c, system_int.c, system_tasks.c, app.c, app.h, and
main.c files.
Known Issues:
• The Configurator Plug-in generated template files are stored in the MPLAB X IDE project folder (inside the
MPLABX_Project.X folder). Users need to add the current directory ‘.’ Path in the MPLAB X Project “properties” > gcc >”
include path settings” for removing “the template file not found error”.
• The created project may compile but not work, as application and system related API calls are not added automatically to the
system_init.c, main.c and system_tasks.c. Only the standard C templates are added to the project.
• The MPLAB Harmony Configurator version during installation or in the plug-in description is shown as 0.0.2 where as the
actual version of the tool is “0.02a”.
• Certain TCP/IP configuration files are getting modified from the default MPLAB Harmony installation directory if the TCP/IP
stack is configured using the Configurator. It is recommended to backup these default configuration files: tcpip_config.h,
http_config.h, snmp_config.h, ssl_config.h, and telnet_config.h, in case it is necessary to revert back to the default
configuration.
• TCPIP system_config.h file is not modified in this release of the Configurator to add the configurations from “ *
*_config.h”. As explained above, the specific module files get updated.
• The Configurator is not preserving the previous project configuration if the TCP/IP sub-modules are selected using the ‘Select
to add default modules’ checkbox in the “TCPIP Stack -> tcpip” module tree.
• Warning message about ‘template files getting overwritten (if already present)’ is not shown if the USB library configuration is
selected.
2.1.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
2.1 MPLAB Harmony Configurator MPLAB Harmony Help SW License Agreement
2-41
2.2 Using the Configurator
2.2.1 Installing the Configurator Plug-in
The MPLAB Harmony Configurator is a MPLAB X IDE plug-in. It must be installed into your MPLAB X IDE installation to be used.
Description
Location
The MPLAB Harmony Configurator (MPLAB X IDE plug-in) is located in the following folder in the MPLAB Harmony installation.
\utilities\configurator\com-microchip-harmonyconfigurator.nbm
Installation
1. Start MPLAB X IDE and select "Plugins" from the "Tools" menu as shown below.
2. Select the “Downloaded” tab.
3. Click the "Add Plugins..." button, browse to \utilities\configurator\ and open the plug in file
"com-microchip-harmonyconfigurator.nbm" as shown below
2.2 Using the Configurator MPLAB Harmony Help Installing the Configurator Plug-in
2-42
4. Ensure that the Check box for the "MPLAB Harmony Configurator" plug-in is selected. Click "Install" as shown below.
2.2 Using the Configurator MPLAB Harmony Help Installing the Configurator Plug-in
2-43
5. Follow the prompts from the installation wizard and continue until the installation completes. Just click "continue”. Once the
installation wizard has finished you can close the "Plugins" dialog box.
You should now see a "MPLAB Harmony Configurator" option under the "Tools" menu. This indicates that the project wizard was
successfully installed.
2.2.2 Running the Configurator Plug-in
This session describes how to run the MPLAB Harmony Configurator to add required files from selected modules into MPLAB X
IDE project.
Note: This version of the Configurator provides Project Configuration (to add files into MPLAB X IDE project) and limited Library
Configuration (only for configuring a few sub-modules of the TCP/IP and USB middleware) capability.
Description
1. To run the Configurator, select "MPLAB Harmony Configurator" from the "Tools" menu.
2. Browse to the root installation folder of the version of MPLAB Harmony that you're using. This folder must contain
"manifest.xml". This file has the information and the path of various software modules available in the installed MPLAB Harmony
version. manifest.xml file should not be moved or deleted from Root directory. Click "Next" when the root path is set.
2.2 Using the Configurator MPLAB Harmony Help Running the Configurator Plug-in
2-44
Note: It is recommended that you create and maintain your MPLAB X IDE project under a subdirectory of the
"/apps" folder and use a relative path to this project.
3. In the Left-hand pane of the "Select Modules and Configurations" dialog, select the desired modules and respective
sub-modules. The right-hand pane shows a brief introduction of the selected module. Click "Next" when the required modules for
the project are selected.
2.2 Using the Configurator MPLAB Harmony Help Running the Configurator Plug-in
2-45
The tool has two configuration sections.
• Project Configuration: All the required modules and Sub modules could be selected here. The respective files would be
added into the MPLAB X IDE project. (example: Graphics, TCP/IP, USB CDC, USB HID selection)
• Library Configuration: The individual configuration of each module could be done here. (Configuration for selected module
from the selected section.)
If the user is required to add their custom module into the MPLAB Harmony directory structure and add the files into the project
through Configurator, the manifest.xml should be modified to accommodate the custom module files. This would allow the
Project Configurator to add the files to the MPLAB X IDE project from the manifest.xml for the custom module. This would not
provide custom configuration capability, however the files can be added to the MPLAB X IDE project.
4. If there are any XML modifications those can be reflected by reloading the tree. To reload the project tree structure, right-click
on “harmony” tree node and click "Reload Tree".
5. To get back to default project configuration of MPLAB Harmony, right-click on “harmony” tree node and click "Load default".
2.2 Using the Configurator MPLAB Harmony Help Running the Configurator Plug-in
2-46
Note: Next window pane is for individual library (Modules and Sub modules) configuration. Currently only TCP/IP and USB
library configuration is supported.
Though all the sub-modules of TCP/IP can be enabled or disabled through project configuration window pane, the individual sub
module configuration is supported only for HTTP, SSL, SNMP and Telnet server. For USB, only CDC and HID class
configuration basic support is provided.
Library Configuration
1. In the "Project configuration" pane, to configure USB CDC select the respective modules and click “Next”. Next window pane
is Library Configuration window as shown below. Configure USB CDC as required, click “Next”.
2.2 Using the Configurator MPLAB Harmony Help Running the Configurator Plug-in
2-47
2. In the "Application Template" pane, select the "Include application template" check box and select "Finish" to add the module
files and template files to the MPLAB X IDE project.
2.2 Using the Configurator MPLAB Harmony Help Running the Configurator Plug-in
2-48
Note: The generate project may compile for PIC32MZ devices, but not necessarily work on the hardware.
The set of template files added to the MPLAB X IDE project would require to be modified with additional configuration information
and the custom application code.
Later versions of the configuration tool may provide additional configuration options and sample application code for each library,
to create a executable project.
2.2.3 Tutorial
This tutorial explains about creating a new MPLAB X IDE project and configuring this project using the MPLAB Harmony
Configurator. The tutorial provides step by step instructions on how to create a MPLAB X IDE project for the TCP/IP Stack.
Description
This tutorial explains about creating a MPLAB X IDE project for TCP/IP library by adding required configurations and TCP/IP
library files, template files and Peripheral Library modules to the selected MPLAB X IDE project using the Configurator.
In this tutorial user would,
1. Create a new project in MPLAB X IDE.
2. Add required source and header files with required configurations for TCP/IP application using MPLAB Harmony Configurator
to the MPLAB X IDE project.
3. Add the required Peripheral header files and template files to the MPLAB X IDE project.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-49
Creating an MPLAB X IDE Project
1. Open MPLAB X IDE, and select File > New Project to open a project explorer window.
2. In Categories, select “Microchip Embedded” and in Projects, select “Standalone Project”. Click Next.
3. Select the PIC device.
4. Select optional Debug Header. Click Next.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-50
5. Select a hardware tool and Click Next.
6. Select the appropriate compiler. Click Next.
7. Name the MPLAB X IDE project and specify its path.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-51
For this tutorial, create a project by name “MyHarmoyConfDemoProject”. Set the project as main project. Click Finish. Now the
project MyHarmonyConfDemoProject” is created.
Note: It is recommended that you maintain your project under a subdirectory of the "/apps" folder and use a relative
path to your project.
Once the MPLAB X IDE project is created, you should see a screen similar to the picture as shown below.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-52
Using MPLAB Harmony Configurator
1. After creating the MPLAB X IDE project, select “Tools -> MPALB Harmony Configuration wizard” to open this plug-in with
MPLAB X IDE.
"MPLAB Harmony Configurator" will open in a new dialogue, as shown below.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-53
2. Browse to the root directory path under "MPLAB Harmony Root Directory" option. This path is remembered by the
Configurator for subsequent usage.
Check or uncheck the "Relative Path" check box as required. Once the path is set, click "Next".
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-54
3. Now configure required middleware modules and Peripheral Library modules.
Peripheral Library headers are selected by default by the tool. For this tutorial user will configure TCP/IP Library. Select the
required configuration modules of TCP/IP modules and also other middleware modules in the Tree structure. Click "Next" once
the selection is complete.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-55
For this release, both the TCP/IP and USB module Library Configuration Pane will appear. For this Tutorial, the TCP/IP module
is selected (default selection ”tcpip ”node) in tree, we get the Library Configuration as below.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-56
4. Select the required configurable items of TCP/IP, and click next (Next button in “Library configuration navigation pane) which
takes to next TCP/IP configuration pane, and continue until the last configuration pane. Once TCP/IP configuration is done, click
Next(Next button at the bottom of TCP/IP Library configuration pane) which takes into the next window "Application Template" to
include template files.
5. Select to Include MPLAB Harmony Application template files. Tool would add template files (main.c, app.c, system_init.c,
system_tasks.c, system_int.c, system_config.h and app.h) to MPLAB X IDE project. Click "Finish".
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-57
6. Check for selected files being added in MPLAB X IDE project. The following figure shows the MPLAB X IDE project with the
added files.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-58
The "MPLAB Harmony Assembly Generator" window in MPLAB X IDE shows the list of files added from "MPLAB Harmony
Configurator" to the MPLAB X IDE project.
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-59
2.2 Using the Configurator MPLAB Harmony Help Tutorial
2-60
3 Applications Help
3 MPLAB Harmony Help
3-61
3.1 Applications Overview
Applications use MPLAB Harmony libraries and define the behavior of a system.
Description
Applications determine how MPLAB Harmony libraries (device drivers, middleware, and system services) are used to do
something useful. In an MPLAB Harmony system, there may be one main application, there may be multiple independent
applications or there may be one or more Operating System (OS) specific applications. Applications interact with MPLAB
Harmony libraries through well defined interfaces. Applications may operate in a strictly polling environment, they may be
interrupt driven, they may be executed in OS-specific threads, or they may be written so as to be flexible and easily configured
for any of these environments.
Applications generally fit into one of the following categories:
Demo Applications:
Demos applications are provided (with MPLAB Harmony or in separate installations) to demonstrate typical or interesting usage
models of one or more MPLAB Harmony libraries. Demonstration applications can demonstrate realistic solutions to real-life
problems.
Sample Applications:
Sample applications are extremely simple applications provided with MPLAB Harmony as examples of how to use individual
features of a library. They will not normally accomplish anything useful on their own. They are provided primarily as
"documentation" to show how to use a library.
Skeletal Applications:
Skeletal applications are provided as bare-bones “skeletons” (potentially targeted to a specific usage or market) that MPLAB
Harmony developers can use as a starting point to for writing their own applications. Skeleton applications contain the necessary
calls, configuration definitions and subroutine stubs with “To Do” items clearly marked for MPLAB Harmony developers to fill in
as desired to create a working application.
Customer Applications:
Customer applications are (of course) not provide by Microchip. Rather, they are any applications developed by customers to
suit specific hardware and software needs. Refer to the Start Here help topic for information on the structure and to learn how to
develop your own MPLAB Harmony applications.
Application Directories
Applications are contained in the "/apps" folder. Under the "apps" folder, they are grouped by technology, board,
and/or market segment.
Examples:
Folder Type of Demos
/apps/examples/peripheral Contains simple peripheral library example applications
/apps/fs Contains graphics library demonstration applications
/apps/gfx Contains TCP/IP networking stack demonstration applications
/apps/tcpip Contains USB device demonstration applications
3.1 Applications Overview MPLAB Harmony Help
3-62
/apps/usb/device Contains USB host demonstration applications
Additional Information
Refer to Release Notes & Information for a complete listing of applications included with this release.
Refer to the help documentation for each individual application for build instructions and information on required hardware and
application usage.
3.1.1 System Overview
To support the framework, the application (or application developer) is responsible for the following:
• Configuring the Framework - Required, unless using a pre-built library. Each driver, middleware layer, and system service
require build-time configuration options that must be defined for the specific application, board, and processor that is used by
any particular demo or customer application. Please refer to the help file of that module on the list of configuration options,
and how they apply to the application.The application can use the board support package configuration file or define its own
configuration for the board.
• Building the Framework Library - Required, unless using a prebuilt library
• Implementing the System Initialization service. Please refer to the help file for the system initialization service for
information on implementing it statically or dynamically
• Implementing a Interrupt Service Routine (ISR) - Required, unless polled. Please refer to the help file for system tasks
service for examples on implementing ISRs.
• Implementing the System Tasks routine - Please refer to the help file for system tasks service for how to implement it
statically or dynamically
3.1 Applications Overview MPLAB Harmony Help System Overview
3-63
3.2 File System Demonstrations
3.2.1 Introduction
MPLAB Harmony File System Demonstration Help
Description
This help file contains instructions and associated information about MPLAB Harmony File System demonstration applications,
which are contained in the MPLAB Harmony Library distribution.
3.2.2 Release Notes
MPLAB Harmony Version: v0.70b File System Demonstrations Version : 0.01a Release Date: 18Nov2013
The interface can change in the beta and\or 1.0 release.
For the latest release information, please refer to the File System Service Library Release Notes section.
New This Release:
Nothing to report for this release.
Known Issues:
Nothing to report for this release.
3.2.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
3.2 File System Demonstrations MPLAB Harmony Help SW License Agreement
3-64
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.2.4 Demonstrations
Provides instructions on how to run the demonstration applications.
Description
The following demonstration applications are available in this release of the MPLAB Harmony File System framework.
3.2.4.1 Overview
Provides an overview of how most of the File System Demonstration applications are structured.
Description
The MPLAB Harmony File System Demonstration Applications show example usage of the File System framework. These
demonstration applications also contain example configurations of media drivers such as Internal Flash and SD Card, that can
be used readily in the end application with the some changes to initialization parameters, if required. A demonstration application
may have multiple MPLAB X IDE project configurations (for different demonstration hardware and microcontrollers). The relevant
configuration should be selected in the MPLAB X IDE before compiling the demonstration. Figure 1 shows the dialog box in
MPLAB X IDE that allows selection of different configurations.
Figure 1: Demonstration MPLAB X IDE Configurations
The project will contain files which are configuration specific. Wherever applicable, these configuration files are placed in
separate MPLAB X IDE project logical folders. Figure 2 shows how the configuration dependant nvm_disk_images.c file is
included in the project. In this case two configurations (pic32mx_usb_sk_Int_dyn and pic32mz_sk_int_dyn) are supported in the
project.
Figure 2: Configuration specific file in File System Demonstration Projects.
Note that some demonstration projects may not support all configurations. In general, the following the demonstration project
contain the following MPLAB X IDE configurations:
• pic32mx_usb_sk_int_dyn: This configuration runs on the PIC32 USB Starter Kit. The media drivers are configured for
interrupt and dynamic operation
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-65
• pic32mz_sk_int_dyn: This configuration runs on the PIC33MZ Embedded Connectivity (EC) Starter Kit. Some demonstration
projects that support this configuration may need the Multimedia Expansion Board II (MEB II) to attached to the starter kit. The
media drivers in this configuration are configured for interrupt and dynamic operation.
Unless specified, the File System demonstration application are structured as indicated in Figure 3.
Figure 3: File System Demonstration Application General Architecture
Here are some general notes while working with the demonstration applications:
1. The system and application is initialized in SYS_Initialize() function, implemented in sys_init.c. The sys_init.c file is
configuration specific. The SYS_Initialize() function initializes the application (APP_Initialize() function) and the BSP
(BSP_Initialize() function).
2. The application then calls SYS_Tasks() function in an infinite loop. This function updates the state machines of all system
components in the demonstration application and also calls the APP_Tasks() function. The is implemented in file sys_tasks.c
which is configuration specific.
3. All Interrupt service routines are implemented in sys_interrupt.c. This file is configuration specific.
3.2.4.2 nvm_fat_single_disk
This demonstration uses a FAT12 image of file on NVM flash memory and demonstrates the working of all file system functions.
Description
This demonstration shows an example of implementing a FAT12 disk in device Flash memory. The demonstration contains a
FAT12 disk image consisting of a Master Boot Record (MBR) sector, Logical Boot Sector, File Allocation Table, Root Directory
Area. The demonstration opens an existing file named "FILE.TXT" and performs all file system related function calls on the file
viz. SYS_FS_FileStat, SYS_FS_FileSize, SYS_FS_FileSeek, SYS_FS_FileEOF. Finally, the string "Hello World" is written to this
file. The file is then closed and reopend for read. The read string is then compared with the string which was written to the file. If
the string compare is successful, LED indication is provided.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-66
3.2.4.2.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Following board is supported for PIC32MX devices: -
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
Following board is supported for PIC32MZ devices: -
Demonstration Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.2.4.2.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.2.4.2.3 Running the Demonstration
Provides instructions on how to build and run the NVM FAT single disk demonstration.
Description
Select the MPLAB X IDE project configuration: -
• pic32mx_usb_sk_int_dyn -- For PIC32MX devices
• pic32mz_sk_int_dyn -- For PIC32MZ devices
Build the selected configuration in the MPLAB X IDE project and program the demonstration board. The execution status
(pass/fail) of the demonstration is indicated by LEDs on the demonstration board.
Demonstration Board Demonstration Successful Demonstration Failure
PIC32 USB Starter Kit II LED3 LED1
PIC32MZ Embedded Connectivity (EC) Starter Kit Green LED Red LED
About the demonstration:
This demonstration shows an example of
- implementing a FAT12 disk in device Flash memory.
- opening a file for read or write.
- implements all the file system functions.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-67
- closing a file.
The demonstration contains a FAT12 disk image consisting of a Master Boot Record (MBR) sector, Logical Boot Sector, File
Allocation Table, Root Directory Area. This image is implemented in the file nvm_disk_images.c (this is project configuration
specific file and is contained in the nvm_disk_images logical folder in the MPLAB X IDE project). The image contains a single file
named "FILE.TXT" which contains the string "Data".
The demonstration opens an existing file named "FILE.TXT" and performs all file system related function calls on the file viz.
SYS_FS_FileStat, SYS_FS_FileSize, SYS_FS_FileSeek, SYS_FS_FileEOF. Finally, the string "Hello World" is written to this file.
The file is then closed and reopened for read. The read string is then compared with the string which was written to the file. If the
string compare is successful, LED indication is provided.
The demonstration application logic is implemented as a state machine in the APP_Tasks() function in the file main.c.
1. The disk is first mounted using the SYS_FS_Mount() function. The "/dev/nvma1" path instructs the mount command to mount
an internal flash volume. The volume is mounted against a FAT type file system and mounted at "/mnt/myDrive/".
2. If the mount is successful, the application opens a file "FILE.TXT" for reading and writing
(SYS_FS_FILE_OPEN_READ_PLUS) with a SYS_FS_FileOpen() function. The valid file handle is received once a successful
opening of file is performed.
3. If file open is successful, the status of file "FILE.TXT" is stored in the appData.fileStatus structure, using SYS_FS_FileStat()
function.
4. If the file status check is successful, the size of the "FILE.TXT" is checked by passing the file handle to the SYS_FS_FileSize()
function.
5. If the file size check is successful, the size of file is compared with the size element received earlier as a part of
appData.fileStatus structure. If both value matches, then the code moves to the next step of file seek.
6. The file pointer is then moved by 4 bytes from the start of the file by calling the function SYS_FS_FileSeek() and passing
parameter as SYS_FS_SEEK_SET (seek from the beginning of the file).
7. If the file seek operation is successful, the file pointer should have reached the end of the file. This is because, the content of
the FILE.TXT had only 4 byte string = "Data". The end of file is verified by calling the function SYS_FS_FileEOF(). If the function
returns "true" (end of file reached), the next step is performed.
8. In the next step, the file pointer is moved again by [(-1)*size of file], from the end of the file by calling the function
SYS_FS_FileSeek() and passing parameter SYS_FS_SEEK_END (seek from the end of the file).
9. If the file seek operation is successful, the file pointer should have reached the beginning of the file. 4 Bytes are read from the
file using SYS_FS_FileRead() function (into a buffer).
10. If the read is successful, the content of file (present in the buffer) is compared with the "Data" string. If the comparison
passed, the code moves to the next step.
11. In the next step, the file pointer is moved again by [(-1)*size of file], from the end of the file by calling the function
SYS_FS_FileSeek() and passing parameter SYS_FS_SEEK_END (seek from the end of the file).
12. If the file seek operation is successful, the string "Hello World" is written to the file using SYS_FS_FileWrite() function.
13. If the write operation is successful, the file is closed.
14. The file "FILE.TXT" is opened again in read mode (SYS_FS_FILE_OPEN_READ).
15. If the file open is successful, the content of the file is read using SYS_FS_FileRead() function (into a buffer).
16. If the read operation is successful, the content of the file (present in the buffer) is compared with the "Hello World" string
using the strcmp() function. A LED indicates the success of the demonstration.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-68
3.2.4.3 sd_card_fat_single_disk
This demonstration uses the SDTM Card with FAT file system as media and performs a read/ write / verify operation on the files
using long file names (LFN).
Description
This demonstration shows an example of using the MPLAB Harmony File System to access and modify the contents of an SDTM
Card. The demonstration opens a file "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG" on the SD Card, reads the content of
the file and writes the content into another file "FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" (create a copy of one file into
another file).
The input file "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG" is not provided along with the release package. It could be any
arbitrary JPG (picture) file chosen by user and then suitably renamed to "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG". The
reason for choosing a JPG file for test purpose is that the duplicate file "FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG"
created by the FS demonstration could be easily verified for correctness by inserting the SD card in computer and opening the
"FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" file. If the file "FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" opens
for viewing on the computer, the test is deemed to have passed. Otherwise, if the
"FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" does not open (is corrupted), the test will be considered as failed.
3.2.4.3.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Following board is supported for PIC32MX devices: -
Demonstration Board (click link for board information)
PIC32MX795F512L Plug-In-Module (PIM)
PICtail Daughter Board for SD and MMC
Note: This board can not be used by itself. An Explorer 16 Development Board is required.
Following board is supported for PIC32MZ devices: -
Demonstration Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
Note: This board can not be used by itself. An Multimedia Expansion Board II (MEB II) is required to run the demonstration.
3.2.4.3.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
Explorer 16 Development Board Based Demonstrations
Use the following instructions for all Explorer 16 Development Board-based demonstration boards:
PIC32MX795F512L PIM
1. Insert the PIM into the Explorer 16 Development Board PIM connector.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-69
2. Jumpers JP1, JP2 and JP3 on the SD Card PICtail Daughter Board should connect to points 2 and 3 on their respective
connectors as shown here.
3. Insert the SD Card PICtail Daughter Board into the PICtail Plus connector on the Explorer 16 Development Board.
4. Insert a SD card into the SD card connector on the SD Card PICtail Daughter Board.
5. Power up the board.
Multimedia Expansion Board II (MEB II)
No hardware setting change is required. Insert the micro SD card into the connector and power up the board.
3.2.4.3.3 Running the Demonstration
Provides instructions on how to build and run the SD card FAT single disk demonstration.
Description
Select the MPLAB X IDE project configuration: -
• exp16_32mx_int_dyn -- For PIC32MX devices
• pic32mz_sk_int_dyn -- For PIC32MZ devices
Insert the SD card, which contains the file "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG". The file can be of any size.
Compile the selected configuration in the MPLAB X IDE project and run the code. After a few seconds, once the LED glows,
remove the SD card from the SD Card PICtail Daughter Board (for PIC32MX) or MEB2 Board (for PIC32MZ) and insert it into the
SD card reader on a PC. Examine the contents of the SD card and another file named
"FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" would have been created.
"FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" will be a copy of "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG". Verify
both the files opens for viewing on the PC.
Demonstration Board Demonstration Successful Demonstration Failure
Explorer 16 Development Board LED5 (D5) LED6 (D6)
PIC32MZ Embedded Connectivity (EC) Starter Kit Green LED Red LED
About the demonstration:
This demonstration shows an example of
- implementing a FAT File system (FAT16/ FAT32) on SD card.
- implementing long file name (LFN).
- opening a file for read or write.
- closing a file.
The demonstration opens a file "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG" on the SD Card, reads the content of the file
and writes the content into another file "FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" (create a copy of one file into
another file).
The demonstration application logic is implemented as a state machine in the APP_Tasks() function in the file main.c.
1. The disk is first mounted using the SYS_FS_Mount() function. The "/dev/mmcblka1" path instructs the mount command to
mount a SD card volume. The volume is mounted against a FAT type file system and mounted at "/mnt/myDrive/".
2. If mount is successful, the volume is unmouned by passing the mount name "/mnt/myDrive" to SYS_FS_Unmount() function.
This unmounting is done for demonstration purpose only. Real application do not need to unmount unless it is required for the
application.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-70
3. If unmount is successful, the mounting process is repeated.
4. If the mount is successful, the application opens a file "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG" for reading with a
SYS_FS_FileOpen() function.
3. If the file open is successful, the application opens a file "FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG" for writing with
SYS_FS_FileOpen() function. The attributes for file write is selected as "SYS_FS_FILE_OPEN_WRITE". Hence, if the file does
not exist on the drive, the file is created.
4. If the file open is successful, 512Bytes from the file "FILE_TOO_LONG_NAME_EXAMPLE_123.JPG" is read into application
buffer using SYS_FS_FileRead() function.
5. If the file read successful, the 512Bytes is written from the application buffer to the
FILE_TOO_LONG_NAME_EXAMPLE_123_1.JPG file using SYS_FS_FileWrite() function.
6. If the write operation is successful, the end of file for FILE_TOO_LONG_NAME_EXAMPLE_123.JPG is checked. If the end of
file is not reached, the process of reading and writing continues (step - 4 and step - 5).
7. Once end of file is reached, both the files are closed with SYS_FS_FileClose() function.
8. Finally, a LED indicates the success of the demonstration.
3.2.4.4 nvm_sdcard_fat_multi_disk
This demonstration uses NVM and SDTM Card as 2 media and reads files from one media and write onto another media.
Description
This demonstration shows an example of using the MPLAB Harmony File System to access files across multiple media. The
demonstration contains a FAT12 disk image consisting of a Master Boot Record (MBR) sector, Logical Boot Sector, File
Allocation Table, Root Directory Area, placed in the internal flash memory (NVM). Also, a SD card is used as another disk, which
might have FAT16 or FAT32 implemented on it (depends on the formatting of SD card).The demonstration reads the contents of
"FILE.TXT" in NVM and copies the contents to "FILE.TXT" in the SDTM Card. If the write operation is successful, LED indication
is provided.
3.2.4.4.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Following board is supported for PIC32MX devices: -
Demonstration Board (click link for board information)
PIC32MX795F512L Plug-In-Module (PIM)
PICtail Daughter Board for SD and MMC
Note: This board can not be used by itself. An Explorer 16 Development Board is required.
Following board is supported for PIC32MZ devices: -
Demonstration Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
Note: This board can not be used by itself. An Multimedia Expansion Board II (MEB II) is required to run the demonstration.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-71
3.2.4.4.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
Explorer 16 Development Board Based Demonstrations
Use the following instructions for all Explorer 16 Development Board-based demonstration boards:
PIC32MX795F512L PIM
1. Insert the PIM into the Explorer 16 Development Board PIM connector.
2. Jumpers JP1, JP2 and JP3 on the SD Card PICtail Daughter Board should connect to points 2 and 3 on their respective
connectors as shown here.
3. Insert the SD Card PICtail Daughter Board into the PICtail Plus connector on the Explorer 16 Development Board.
4. Insert a SD card into the SD card connector on the SD Card PICtail Daughter Board.
5. Power up the board.
Multimedia Expansion Board II (MEB II)
No hardware setting change is required. Insert the micro SD card into the connector and power up the board.
3.2.4.4.3 Running the Demonstration
Provides instructions on how to build and run the NVM SD card FAT multi disk demonstration.
Description
Select the MPLAB X IDE project configuration: -
• exp16_32mx_int_dyn -- For PIC32MX devices
• pic32mz_sk_int_dyn -- For PIC32MZ devices
Insert the SD card, which contains the file "FILE.TXT" and the file contains "abc" (some arbitrary existing content).
Compile the selected configuration in the MPLAB X IDE project and run the code. After a few seconds, once the LED glows,
remove the SD card from the Board and insert it into the SD card reader on a PC. Examine the contents of the file named
"FILE.TXT". The file should contain the string "This data is from NVM Disk".
Demonstration Board Demonstration Successful Demonstration Failure
Explorer 16 Development Board LED5 (D5) LED6 (D6)
PIC32MZ Embedded Connectivity (EC) Starter Kit Green LED Red LED
About the demonstration:
This demonstration shows an example of:
- implementing a multi disk demonstration with FAT12 on internal flash memory (NVM) and FAT File system (FAT16/ FAT32) on
SD card.
- opening two files from two different disks, read content of file from first disk and write into the file of second disk.
- closing the files.
The demonstration contains a FAT12 disk image consisting of a Master Boot Record (MBR) sector, Logical Boot Sector, File
Allocation Table, Root Directory Area, placed in the internal flash memory (NVM). Also, a SD card is used as another disk, which
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-72
might have FAT16 or FAT32 implemented on it (depends on the formatting of SD card).The demonstration reads the contents of
"FILE.TXT" in NVM and copies the contents to "FILE.TXT" in the SDTM Card. If the write operation is successful, LED indication
is provided.
The demonstration application logic is implemented as a state machine in the APP_Tasks() function in the file main.c.
1. The first disks is mounted using the SYS_FS_Mount() function. The "/dev/nvma1" path instructs the mount command to mount
a internal flash volume. The volume is mounted against a FAT type file system and mounted at "/mnt/myDrive1/".
2. If the mount is successful, the second disks is mounted using the SYS_FS_Mount() function. The "/dev/mmcblka1" path
instructs the mount command to mount a SD card volume. The volume is mounted against a FAT type file system and mounted
at "/mnt/myDrive2/".
3. If the mount is successful, the application opens a file "FILE.TXT" from "/mnt/myDrive1/" for reading and "FILE.TXT" from
"/mnt/myDrive2/" for writing with a SYS_FS_FileOpen() function.
4. If the file open is successful, the application reads 27Bytes from "FILE.TXT" of internal flash volume using
SYS_FS_FileRead().
5. If the read is successful, the application closes the "FILE.TXT" from internal flash volume and then writes the 27Bytes into
"FILE.TXT" of SD card volume using SYS_FS_FileWrite().
6. If the write is successful, the application closes the "FILE.TXT" from SD card volume.
7. If file close is successful, LED indicates the success of the operation.
3.2.4.5 nmv_mpfs_single_disk
This demonstration uses a MPFS image of 3 files on NVM flash memory and demonstrates the working of all file system
functions.
Description
This demonstration shows an example of implementing a MPFS disk in device Flash memory. The demonstration contains a
MPFS disk image in the internal flash memory. The disk image contains 3 files named: -
"FILE.txt" , Size = 11Bytes. The content of the file is -- "Hello World".
"ABC.txt", Size = 31744Bytes. The content of the file is not important. Just a file of sufficiently big size.
"TEST.txt" , Size = 72Bytes. The content of the file is -- "This file contains a test string and it is meant for testing. 1234567890".
The demonstration performs all file system related function calls on the file viz. SYS_FS_FileRead, SYS_FS_FileStat,
SYS_FS_FileSize, SYS_FS_FileSeek, SYS_FS_FileEOF. If all the test succeeds, LED indication is provided.
3.2.4.5.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Following board is supported for PIC32MX devices: -
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-73
Following board is supported for PIC32MZ devices: -
Demonstration Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.2.4.5.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.2.4.5.3 Running the Demonstration
Provides instructions on how to build and run the NVM MPFS single disk demonstration.
Description
Select the MPLAB X IDE project configuration: -
• pic32mx_usb_sk_int_dyn -- For PIC32MX devices
• pic32mz_sk_int_dyn -- For PIC32MZ devices
Build the selected configuration in the MPLAB X IDE project and program the demonstration board. The execution status
(pass/fail) of the demonstration is indicated by LEDs on the demo board.
Demonstration Board Demonstration Successful Demonstration Failure
PIC32 USB Starter Kit II LED3 LED1
PIC32MZ Embedded Connectivity (EC) Starter Kit Green LED Red LED
About the demonstration:
This demonstration shows an example of
- implementing a MPFS disk in device Flash memory.
- opening a file for read.
- implements all the file system functions.
- closing a file.
This demonstration shows an example of implementing a MPFS disk in device Flash memory. The demonstration contains a
MPFS disk image in the internal flash memory. The disk image contains 3 files named: -
"FILE.txt" , Size = 11Bytes. The content of the file is -- "Hello World".
"ABC.txt", Size = 31744Bytes. The content of the file is not important. Just a file of sufficiently big size.
"TEST.txt" , Size = 72Bytes. The content of the file is -- "This file contains a test string and it is meant for testing. 1234567890".
The demonstration application logic is implemented as a state machine in the APP_Tasks() function in the file main.c.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-74
1. The disk is first mounted using the SYS_FS_Mount() function. The "/dev/nvma1" path instructs the mount command to mount
an internal flash volume. The volume is mounted against a MPFS2 type file system and mounted at "/mnt/myDrive/".
2. If the mount is successful, the application opens a file "FILE.txt" for reading with a SYS_FS_FileOpen() function.
3. If the open is successful, the application opens another file "TEST.txt" for reading with SYS_FS_FileOpen() function.
4. If open is successful, the application checks the status of another file "ABC.txt" using SYS_FS_FileStat() function and stores
the status of the file into the structure "appData.fileStatus".
5. If file status check is successful, the application compares the size of file (from "appData.fileStatus" structure) with the known
value of 31744 (Bytes).
6. If the comparison is successful, the application checks for size of file "FILE.txt", by passing the handle obtained during file
open, to the function SYS_FS_FileSize().
7. If the file size matches the known value of 11 (Bytes), the application moves the file pointer for the file "TEST.txt" 10Bytes from
the end of file, using the function SYS_FS_FileSeek().
8. If file seek is successful, 10 Bytes of content of the file "TEST.txt" is read into the application buffer, using the function
SYS_FS_FileRead().
9. If read is successful, the application buffer content is compared with the known string of "1234567890" using the strncmp()
function.
10. If the comparison is successful, the application checks if the file pointer for file "TEST.txt" has reached the end of file using
the SYS_FS_FileEOF() function.
11. If end of file is reached, a LED indicates the success of the demonstration.
3.2.4.6 nvm_sdcard_fat_mpfs_multi_disk
This demonstration uses NVM and SDTM Card with MPFS and FAT image of file and performs a read/ write/ verify operation
from file of one media to another media.
Description
This demonstration shows an example of using the MPLAB Harmony File System to access files across multiple disks and
multiple file system. The demonstration contains a MPFS disk image in the internal flash memory. The disk image contains a file
named "abc.txt" with content "Hello World". Another disk is a SD card, which is formatted to FAT (FAT16 or FAT32). The
demonstration reads the contents of "abc.txt" from the disk implemented on internal flash memory and writes the contents to
"FILE.TXT" on the SDTM Card. A successful write is indicated by a LED glow.
3.2.4.6.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Following board is supported for PIC32MX devices: -
Demonstration Board (click link for board information)
PIC32MX795F512L Plug-In-Module (PIM)
PICtail Daughter Board for SD and MMC
Note: This board can not be used by itself. An Explorer 16 Development Board is required.
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-75
Following board is supported for PIC32MZ devices: -
Demonstration Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
Note: This board can not be used by itself. An Multimedia Expansion Board II (MEB II) is required to run the demonstration.
3.2.4.6.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
Explorer 16 Development Board Based Demonstrations
Use the following instructions for all Explorer 16 Development Board-based demonstration boards:
PIC32MX795F512L PIM
1. Insert the PIM into the Explorer 16 Development Board PIM connector.
2. Jumpers JP1, JP2 and JP3 on the SD Card PICtail Daughter Board should connect to points 2 and 3 on their respective
connectors as shown here.
3. Insert the SD Card PICtail Daughter Board into the PICtail Plus connector on the Explorer 16 Development Board.
4. Insert a SD card into the SD card connector on the SD Card PICtail Daughter Board.
5. Power up the board.
Multimedia Expansion Board II (MEB II)
No hardware setting change is required. Insert the micro SD card into the connector and power up the board.
3.2.4.6.3 Running the Demonstration
Provides instructions on how to build and run the NVM SD card FAT MPFS multi disk demonstration.
Description
Select the MPLAB X IDE project configuration: -
• exp16_32mx_int_dyn -- For PIC32MX devices
• pic32mz_sk_int_dyn -- For PIC32MZ devices
Insert the SD card, which contains the file "FILE.TXT" and the file contains "abc" (some arbitrary existing content).
Compile the selected configuration in the MPLAB X IDE project and run the code. After a few seconds, once the LED glows,
remove the SD card from the SD Card PICtail Daughter Board and insert it into the SD card reader on a PC. Examine the
contents of the file named "FILE.TXT". The file should contain the string "Hello World".
Demonstration Board Demonstration Successful Demonstration Failure
Explorer 16 Development Board LED5 (D5) LED6 (D6)
PIC32MZ Embedded Connectivity (EC) Starter Kit Green LED Red LED
About the demonstration:
This demonstration shows an example of
- implementing a multi disk demonstration with MPFS on internal flash memory (NVM) and FAT File system (FAT16/ FAT32) on
3.2 File System Demonstrations MPLAB Harmony Help Demonstrations
3-76
SD card.
- opening two files from two different disks, read content of file from first disk and write into the file of second disk.
- closing the files.
The demonstration contains a MPFS disk image in the internal flash memory. The disk image contains a file named "abc.txt" with
content "Hello World". Another disk is a SD card, which is formatted to FAT (FAT16 or FAT32). The demonstration reads the
contents of "abc.txt" from the disk implemented on internal flash memory and writes the contents to "FILE.TXT" on the SDTM
Card. A successful write is indicated by a LED glow.
The demonstration application logic is implemented as a state machine in the APP_Tasks() function in the file main.c.
1. The first disks is mounted using the SYS_FS_Mount() function. The "/dev/nvma1" path instructs the mount command to mount
a internal flash volume. The volume is mounted against a MPFS2 type file system and mounted at "/mnt/myDrive1/".
2. If the mount is successful, the second disks is mounted using the SYS_FS_Mount() function. The "/dev/mmcblka1" path
instructs the mount command to mount a SD card volume. The volume is mounted against a FAT type file system and mounted
at "/mnt/myDrive2/".
3. If the mount is successful, the application opens a file "abc.txt" from "/mnt/myDrive1/" for reading and "FILE.TXT" from
"/mnt/myDrive2/" for writing with a SYS_FS_FileOpen() function.
4. If the file open is successful, the application reads 13Bytes from "abc.txt" of internal flash volume using SYS_FS_FileRead().
5. If the read is successful, the application closes the "abc.txt" from internal flash volume and then writes the 13Bytes into
"FILE.TXT" of SD card volume using SYS_FS_FileWrite().
6. If the write is successful, the application closes the "FILE.TXT" from SD card volume.
7. If file close is successful, LED indicates the success of the operation.
3.2.5 Demonstration Board Information
Information on Hardware used by the File System Demonstration Applications.
Description
The File System Library Demonstration Applications can be tried across different hardware boards. This section provide details
on these hardware boards.
3.2.5.1 PIC32 USB Starter Kit II
Hardware Information:
3.2 File System Demonstrations MPLAB Harmony Help Demonstration Board Information
3-77
SW1 - Application switch. Tied to RD6.
SW2 - Application switch. Tied to RD7.
SW3 - Application switch. Tied to RD13.
LED1 - Application LED. Tied to RD0.
LED2 - Application LED. Tied to RD1.
LED3 - Application LED. Tied to RD2.
More Information
Product webpage
3.2.5.2 Explorer 16 Development Board
Hardware Information:
3.2 File System Demonstrations MPLAB Harmony Help Demonstration Board Information
3-78
S1 - Reset button (MCLR)
S2 - Processor switch. This switch determines which processor is running, the processor on the board or the processor on the
Plug-In-Module (PIM).
S3, S4, S5, S6 - Application switches. For information about what pin is connected to this switch, please refer to the information
for the PIM in use.
D3 through D10 - Application LEDs. For information about what pin is connected to this LED, please refer to the information for
the PIM in use.
More Information:
Product webpage
3.2.5.3 PIC32MX795F512 Plug-In-Module (PIM)
More Information
Product webpage
3.2 File System Demonstrations MPLAB Harmony Help Demonstration Board Information
3-79
3.2.5.4 PICtail Daughter Board for SD and MMC
More Information:
Product webpage.
3.2.5.5 PIC32MZ Embedded Connectivity (EC) Starter Kit
Provides details information on the PIC32MZ Embedded Connectivity (EC) Starter Kit.
Description
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
3.2 File System Demonstrations MPLAB Harmony Help Demonstration Board Information
3-80
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.2 File System Demonstrations MPLAB Harmony Help Demonstration Board Information
3-81
3.2.5.6 Multimedia Expansion Board II (MEB II)
Provides details information on the Multimedia Expansion Board II (MEB) II.
Description
Microchip Part Number: DM320005-2
Product Page
The front side of the MEB II includes these key features, as shown in Figure 1:
1. Display daughter board connector (60-pin Hirose board-to-board connector).
2. mTouch™ buttons.
3. Push Button.
4. Power LED.
5. User LEDs.
6. VGA Camera (OVM7690).
7. PICtail™ Connector.
8. Analog temperature sensor.
Figure 1: Multimedia Expansion Board II Layout (Front)
The underside of the MEB II includes these key features, as shown in Figure 2:
1. Regulated 5V and 3.3V power supply for powering the board via a 9-15V DC Adapter.
2. PIC32 Starter Kit connector (168-pin Hirose board-to-board connector).
3. 24-bit stereo audio codec (AK4953A).
4. Integrated 802.11bg wireless module (MRF24WG0MA).
5. Low-cost Bluetooth® HCI transceiver (BTM805).
6. EBI SRAM memory (IS61WV102416BLL).
7. microSD slot.
3.2 File System Demonstrations MPLAB Harmony Help Demonstration Board Information
3-82
8. Analog accelerometer (ADXL325).
Figure 2: Multimedia Expansion Board II Layout (Back)
3.2 File System Demonstrations MPLAB Harmony Help Demonstration Board Information
3-83
3.3 Graphics Demonstrations
3.3.1 Introduction
Graphics Library Demonstrations Applications Help
Description
This distribution package contains a variety of Graphics-related firmware projects that demonstrate the capabilities of the MPLAB
Harmony Graphics library. This help file describes the hardware requirement and procedures to run these firmware projects on
Microchip graphics boards.
To know more about MPLAB Harmony Graphics, configuring the library and the APIs provided; refer to the Graphics Library
documentation.
Graphic Demonstration Description
Primitive Cyclically demonstrates various types of shapes and images, which include circles, lines, and
rectangles that can be created from the Graphics Library.
Object Touch interactive demonstration of various pages of objects that can be created from the
Graphics Library.
ssd1926 Touch interactive demonstration of JPEG decoded images from an SD card utilizing the JPEG
decoder of the Solomon Systech SSD1926 graphics controller.
lcc Demonstrates the advanced capabilities of the Graphics Library utilizing the software graphics
controller.
3.3.2 Release Notes
MPLAB Harmony Version: v0.70b Graphics Demonstrations Version : 4.00b Release Date: 18Nov2013
New This Release:
Nothing to report for this release.
Known Issues:
LCC Demonstration: For the PIC32MZ Embedded Connectivity (EC) Starter Kit, after programming, the application may not
display the UI folders as expected. If this occurs, to activate the UI display, touch the screen in the folder icons area. This issue
will be addressed in the next release of MPLAB Harmony.
3.3 Graphics Demonstrations MPLAB Harmony Help SW License Agreement
3-84
3.3.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.3.4 Demonstrations
This topic provides information on how to run the Graphics Library demonstration applications included in this release.
Description
All demonstrations provided should be built using the MPLAB X IDE development environment tool supplied by Microchip.
The information that follows, communicate the general steps to building the graphics demos.
• Using MPLAB X IDE, click the File drop-down, select "Open Project...". Navigate to your Harmony installation folder. The
default location on Windows will be: C:\Microchip\Harmony\\apps\gfx.
• In the \app\gfx folder there will be the object, primitive, lcc, and ssd1926 demonstration applications.
• Within each demonstration folder, there will be a firmware folder. In the firmware folder will exist the MPLAB X IDE project
specific to each demonstration.
• Select the project and click "Open Project"
• To configure the project specific to a preset board configuration, right click on the project and select "Set Configuration". This
will set the build configuration to match the supported board configuration.
3.3.4.1 lcc_demo
Demonstrates the advanced capabilities of the Graphics Library utilizing the software graphics controller.
Description
This demonstration provides the ability to display alpha blend and gradient colors through the software graphics controller. The
demonstration renders four folders for alpha blend, gradient, picture-in-picture (PIP), and performance for all PIC32 devices.
For PIC32MX devices, the demonstration runs on the PICtail Plus LCC Daughter Board, and on PIC32MZ devices, it runs on the
Multimedia Expansion Board II (MEB II).
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstrations
3-85
3.3.4.1.1 Supported Demonstration Boards
Lists supported demo and development hardware boards.
Description
Demo Board (click link for board information) Notes
PIC32 USB Starter Kit II -
Graphics PICtail LCC Board AC164144 -
WQVGA 480x272 Board AC164127-6 -
Multimedia Expansion Board II (MEB II) -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.3.4.1.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
Multimedia Expansion Board II (MEB II)
The MEB II has two memory options: External or Internal. This demonstration requires External EBI memory, which is configured
using the following J9 jumper settings:
• EBIOE and LCD_PCLK (jumper is closed)
• EBIWE (jumper is open)
3.3.4.1.3 Running the Demonstration
Provides instructions on how to build and run the LCC demo.
Description
Select one of the following build configurations to build the LCC demo:
• pic32mxusbsk_pictaillcc_wqvga -- For PIC32MX devices
• pic32mzsk_meb2_wqvga -- For PIC32MZ devices
Build the selected configuration in the MPLAB X IDE project and program the demonstration board. The demonstration renders
four folders for alpha blend, gradient, picture-in-picture (PIP), and performance. Touch one of the folders to activate the
demonstration.
Short Name Long Name
pic32mxusbsk PIC32 USB Starter Kit II
pic32mzsk PIC32MZ Embedded Connectivity (EC) Starter Kit
meb2 Multimedia Expansion Board II (MEB II)
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstrations
3-86
wqvga Graphics Display Powertip 4.3" 480 × 272 Board (AC164127-6)
3.3.4.2 primitive_demo
An example of primitive drawing capabilities of the Graphics Library.
Description
The Primitive example demonstrates the various types of shapes and images which include: circles, lines, rectangles that exist in
the Graphics Library.
This example shows the following primitives:
• GFX_LineDraw
• GFX_CircleDraw
• GFX_CircleFillDraw
• GFX_RectangleRoundDraw
• GFX_RectangleRoundFillDraw
• GFX_RectangleFillDraw
• GFX_ArcDraw
• GFX_PolygonDraw
• GFX_FontSet
• GFX_TextStringXYPut
• GFX_ImageDraw
• GFX_ScreenClear
3.3.4.2.1 Supported Demonstration Boards
Lists supported demo and development hardware boards.
Description
Following boards are supported for PIC32MX devices:
Demo Board (click link for board information) Notes
PIC32 USB Starter Kit II -
Graphics LCD Controller PICtail Plus SSD1926 Board AC164127-5 -
QVGA 320x240 Board AC164127-4 -
Following board is supported for PIC32MZ devices:
Demo Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
Multimedia Expansion Board II (MEB II) -
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstrations
3-87
3.3.4.2.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.3.4.2.3 Running the Demonstration
Provides instructions on how to build and run the primitive demo.
Description
Navigate to the apps/gfx/primitive/firmware folder and open the primitive project, and then select one of the following build
configurations to build the Primitive demo:
• pic32mxusbsk_pictails1d_wqvga -- For PIC32MX devices
• pic32mxusbsk_pictailssd_qvga -- For PIC32MX devices
• pic32mzsk_meb2_wqvga -- For PIC32MZ devices
Once the project is loaded and executed on the target board, a continuous display of primitive graphics will appear on the LCD.
Short Name Long Name
pic32mxusbsk PIC32 USB Starter Kit II
pic32mzsk PIC32MZ Embedded Connectivity (EC) Starter Kit
pictails1d Graphics LCD Controller PICtail Plus S1D1357 Board
pictailssd Graphics LCD Controller PICtail Plus SSD1926 Board
meb2 Multimedia Expansion Board II (MEB II)
qvga Graphics Display Truly 3.2" 240 × 320 Board (AC164127-4)
wqvga Graphics Display Powertip 4.3" 480 × 272 Board (AC164127-6)
3.3.4.3 object_demo
An example of standard user-interface widgets of the Graphics Library.
Description
The Object example demonstrates the standard types of objects/widgets that exist in the Graphics Library Graphics Object Layer
(GOL). The demonstration is composed of several pages of examples.
The demonstration requires that the user touch the screen to begin the demo. The user is expected to navigate to the next or
previous page by selecting the buttons on the far right and left locations of the screen.
This example shows the following widgets:
• GFX_GOL_ButtonCreate
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstrations
3-88
• GFX_GOL_ButtonTextSet
• GFX_GOL_CheckboxCreate
• GFX_GOL_GroupboxCreate
• GFX_GOL_RadioButtonCreate
• GFX_GOL_GroupboxCreate
• GFX_GOL_StaticTextCreate
• GFX_GOL_ScrollBarCreate
• GFX_GOL_ProgressBarCreate
• GFX_GOL_ListboxCreate
• GFX_GOL_ScrollBarCreate
• GFX_GOL_Editbox_Create
• GFX_GOL_MeterCreate
• GFX_GOL_DigitalMeterCreate
• GFX_GOL_RoundDialCreate
• GFX_GOL_PictureCreate
• GFX_GOL_CustomControlCreate
3.3.4.3.1 Supported Demonstration Boards
Lists supported demo and development hardware boards.
Description
Following boards are supported for PIC32MX devices:
Demo Board (click link for board information) Notes
PIC32 USB Starter Kit II -
Graphics LCD Controller PICtail Plus SSD1926 Board AC164127-5 -
QVGA 320x240 Board AC164127-4 -
Following board is supported for PIC32MZ devices:
Demo Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
Multimedia Expansion Board II (MEB II) -
3.3.4.3.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstrations
3-89
No hardware related configuration or jumper setting changes are necessary.
3.3.4.3.3 Running the Demonstration
Provides instructions on how to build and run the object demo.
Description
Navigate to the apps/gfx/object/firmware and open the object project, and then select one of the following build configurations to
build the Object demo:
• pic32mxusbsk_pictailssd_qvga -- For PIC32MX devices
• pic32mzsk_meb2_wqvga -- For PIC32MZ devices
Once the project is loaded and executed on the target board, various objects are displayed. Touch the forward or back arrow to
view additional objects.
Short Name Long Name
pic32mxusbsk PIC32 USB Starter Kit II
pic32mzsk PIC32MZ Embedded Connectivity (EC) Starter Kit
pictailssd Graphics LCD Controller PICtail Plus SSD1926 Board
meb2 Multimedia Expansion Board II (MEB II)
qvga Graphics Display Truly 3.2" 240 × 320 Board (AC164127-4)
3.3.4.4 ssd_demo
Shows how to display JPEG images using the Solomon Systech (SSD1926) graphics controller that resides on the PICtail™
Plus SSD1926 Board.
Description
The SSD1926 demo shows how to decode of JPEG images from an SD card utilizing the JPEG decoder capabilities of the
Solmon Systech SSD1926 graphics controller.
3.3.4.4.1 Supported Demonstration Boards
Lists supported demo and development hardware boards.
Description
Following board is supported for PIC32MX devices:
Demo Board (click link for board information) Notes
PIC32 USB Starter Kit II -
Graphics LCD Controller PICtail Plus SSD1926 Board AC164127-5 -
QVGA 320x240 Board AC164127-4 -
3.3.4.4.2 Configuring the Hardware
Describes how to configure the supported hardware.
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstrations
3-90
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
3.3.4.4.3 Running the Demonstration
Provides instructions on how to build and run the SSD1926 demo.
Description
Navigate to the apps/gfx/ssd1926/firmware and open the ssd1926 project, and then select one of the following build
configurations to build the SSD1926 demo:
• pic32mxusbsk_pictailssd_qvga -- For PIC32MX devices
Once the project is loaded and executed on the target board, various JPEG images, which are stored on a SD card are
displayed.
Short Name Long Name
pic32mxusbsk PIC32 USB Starter Kit II
pictalssd Graphics LCD Controller PICtail Plus SSD13517 Board
qvga Graphics Display Truly 3.2" 240 × 320 Board (AC164127-4)
3.3.5 Demonstration Board Information
This topic provides specific information about the development boards available for the demonstration applications.
3.3.5.1 PIC32 USB Starter Kit II
Provides information on the PIC32 USB Starter II.
Description
SW1 - Application switch. Tied to RD6.
SW2 - Application switch. Tied to RD7.
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstration Board Information
3-91
SW3 - Application switch. Tied to RD13.
LED1 - Application LED. Tied to RD0.
LED2 - Application LED. Tied to RD1.
LED3 - Application LED. Tied to RD2.
This board supports the following USB Device demonstrations:
• CDC Single COM port (cdc_com_port_single).
• CDC Dual COM port (cdc_com_port_dual)
• HID Basic (hid_basic)
• HID Mouse (hid_mouse)
• HID Keyboard (hid_keyboard)
• HID Joystick (hid_joystick)
• MSD Flash Drive (msd_basic)
• Generic USB Device (generic_device)
More Information
Microchip Part Number : DM320003-2
3.3.5.2 PIC32MZ Embedded Connectivity (EC) Starter Kit
Provides details information on the PIC32MZ Embedded Connectivity (EC) Starter Kit.
Description
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstration Board Information
3-92
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstration Board Information
3-93
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstration Board Information
3-94
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.3.5.3 PICtail Plus SSD1926 Daughter Board
This topic provides information about the Graphics LCD Controller PICtail™ Plus SSD1926 Board.
Description
More Information
Microchip Part Number: AC164127-5
Microchip Product Page
3.3.5.4 PICtail Plus S1D13517 Daughter Board
This topic provides information about the Graphics LCD Controller PICtail™ Plus SSD1926 Daughter Board.
Description
More Information
Microchip Part Number: AC164127-7
Microchip Product Page
3.3.5.5 PICtail Plus LCC Daughter Board
This topic provides information about the Graphics LCD Controller PICtail™ Plus LCC Daughter Board.
Description
More Information
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstration Board Information
3-95
Microchip Part Number: AC164144
Microchip Product Page
3.3.5.6 PIC32MX795F512L Plug-In-Module (PIM)
Provides information on the PIC32MX795F512L Plug-In-Module (PIM).
Description
This PIM is required while using the Explorer 16 Development Board.
More Information
Microchip Part Number: MA320003
microchipDIRECT Product Page
3.3.5.7 Multimedia Expansion Board (MEB)
This topic provides information about the Multimedia Expansion Board (MEB).
3.3.5.8 Multimedia Expansion Board II (MEB II)
Provides details information on the Multimedia Expansion Board II (MEB) II.
Description
Description
Microchip Part Number: DM320005-2
Product Page
The front side of the MEB II includes these key features, as shown in Figure 1:
1. Display daughter board connector (60-pin Hirose board-to-board connector).
2. mTouch™ buttons.
3. Push Button.
4. Power LED.
5. User LEDs.
6. VGA Camera (OVM7690).
7. PICtail™ Connector.
8. Analog temperature sensor.
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstration Board Information
3-96
Figure 1: Multimedia Expansion Board II Layout (Front)
The underside of the MEB II includes these key features, as shown in Figure 2:
1. Regulated 5V and 3.3V power supply for powering the board via a 9-15V DC Adapter.
2. PIC32 Starter Kit connector (168-pin Hirose board-to-board connector).
3. 24-bit stereo audio codec (AK4953A).
4. Integrated 802.11bg wireless module (MRF24WG0MA).
5. Low-cost Bluetooth® HCI transceiver (BTM805).
6. EBI SRAM memory (IS61WV102416BLL).
7. microSD slot.
8. Analog accelerometer (ADXL325).
Figure 2: Multimedia Expansion Board II Layout (Back)
3.3 Graphics Demonstrations MPLAB Harmony Help Demonstration Board Information
3-97
3.4 Peripheral Library Example Applications
This topic describes the peripheral library example applications.
3.4.1 Introduction
Peripheral Library Example Applications
for
MPLAB Harmony
The example applications for MPLAB peripheral libraries (PLIBs) provide very simple single-purpose examples of how to use
MPLAB Harmony peripheral libraries.
Description
Peripheral libraries (PLIBs) are the lowest level libraries provided with MPLAB Harmony. They provide a functional abstraction of
the peripherals available on Microchip microcontrollers to hide differences in register details that can exist from part to part.
However, they do not maintain any state data (at least not any that isn't stored in the hardware registers) from call to call and
they do not provide any protection of the peripheral's resources. As such, any code that calls the PLIB for a peripheral must take
responsibility for ownership of that peripheral and is responsible for managing the behavior of that peripheral.
As such, PLIBs are normally only used by MPLAB Harmony device drivers or system services. However, there are some times
when it is necessary and appropriate to interact with a PLIB directly from an application. So, simple examples are provided to
show how to use the interfaces the peripheral libraries. These examples are available in the MPLAB Harmony installation in the
following location.
Location of Example Applications
/apps/examples/peripheral
Examples are divided into two different groups:
• Blocking Examples
• State-Driven Examples
Most MPLAB Harmony applications use a state-machine driven structure. So, examples are provided that follow this structure in
the "state_driven" subdirectory. However, it is sometimes easier to understand a simple blocking example (one that sits in a loop
for ever or until its task is done). So, simple blocking examples are also provided in the "blocking" subdirectory.
Blocking examples are divided into PIC32MX and PIC32MZ variants. PIC32MX examples are written for the Explorer16
Development Board with a PIC32MX795F512L PIM. PIC32MZ examples are written for the PIC32MZ Embedded Connectivity
(EC) Starter Kit. The state-driven examples are tested and working on the Explorer 16 Development Board, the PIC32 USB
Starter Kit II, and the PIC32MZ Embedded Connectivity (EC) Starter Kit, and the appropriate board configuration for each project
can be selected in MPLAB X IDE.
3.4 Peripheral Library Example Applications MPLAB Harmony Help Release Notes
3-98
3.4.2 Release Notes
MPLAB Harmony Version: v0.70b Peripheral Library Example Applications Version: 0.01a Release Date: 18Nov2013
The interface can change in the beta and\or 1.0 release.
New This Release:
Nothing to report for this release.
Known Issues:
Nothing to report for this release.
3.4.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.4.4 Blocking Applications
This topic contains a list of the MPLAB Harmony blocking peripheral library (PLIB) example applications.
Description
The tables below list and summarizes the simple blocking peripheral library example applications.
Location
/apps/examples/peripheral/blocking/pic32mx
PIC32MX PLIB-based Applications
3.4 Peripheral Library Example Applications MPLAB Harmony Help Blocking Applications
3-99
Name Subdirectory Description
ADC
Potentiometer
adc/adc_pot Repeatedly reads the Explorer 16 Development Board potentiometer and outputs a
pattern on the LEDs corresponding to the potentiometer's position.
Memory
Partition
bmx/mem_partition Partitions flash memory and ram. Explorer 16 Development Board LEDs are turned
on if the RAM partition sizes are correct and the partitioning completed successfully.
Simple
Comparator
cmp/simple_comparator Toggles the LEDs on the Explorer 16 Development Board, depending on which input
of the comparator is at a higher voltage.
Triangle
Wave
cvref/triangle_wave This example will generate a triangular wave on the CVREF output pin.
LED Pattern dma/led_pattern Blinks LEDs on the Explorer 16 Development Board using a pattern stored in Flash
memory. It uses the DMA controller to transfer data from flash to the I/O port
controlling the LEDs.
Master-Slave i2c/master_slave The I2C1 module is setup to operate as the master, while the I2C2 module operates
as the slave. The master sends a string to the slave, which stores the data into an
array.
Simple
Input-Capture
ic/simple_input_capture When a rising edge is output to the Input Capture 1 pin (RD8), it triggers an interrupt,
which then stores the captured timer value into the 'CaptureTime' variable.
Flash Modify nvm/flash_modify Reads, writes and erases data in the program Flash memory.
PWM
Example
oc/oc_pwm Generates a 40 kHz PWM with a 25% duty cycle on the OC1 output pin.
Oscillator
Configuration
osc/osc_config Demonstrates how to change the system clock source and PLL values during
run-time.
LCD Example pmp/pmp_lcd Writes two lines of text to the LCD screen on the Explorer 16 Development Board.
Blinky Leds ports/blinky_leds Toggles the Explorer 16 Development Board LEDs in an infinite loop.
Change
Notice
ports/cn_interrupt When SW4 (the right most button on Explorer 16 Development Board) is pressed, it
triggers a change notice interrupt, which then toggles the Explorer 16 Development
Board LEDs.
Sleep Mode power/sleep_mode This example demonstrates how to put the device into Sleep mode and then awake
the device using the Watchdog Timer.
Reset
Handler
reset/reset_handler This example does checks on various reset flags, assigning each one to an Explorer
16 Development Board LED. If the flag is set, the LED is turned on and the reset flag
is cleared.
RTCC Alarm rtcc/rtcc_alarm Sets up the RTCC module to function as an alarm, which goes off at 6:00am every
morning.
SPI
Loopback
spi/spi_loopback This example assumes that the SPI SDO (output) is connected to the SDI (input).
Data is then transferred directly from the output to the input and the Explorer 16
Development Board LEDs are turned on if the data transfer is successful.
Timer
Example
tmr/timer2_interrupt Uses Timer2 in 32-bit mode to generate an interrupt every one second, blinking the
LEDs on the Explorer 16 Development Board.
Simple UART uart/simple_uart When the Explorer 16 Development Board is connected to a PC with an RS-232
cable, the device will echo what characters the user types into a terminal program
(e.g., Putty) and write the corresponding 8-bit character pattern to the Explorer 16
Development Board LEDs.
Simple WDT wdt/simple_wdt Demonstrates how to setup the Watchdog Timer and detect whether or not a
time-out reset has occurred.
Location
/apps/examples/peripheral/blocking/pic32mz
3.4 Peripheral Library Example Applications MPLAB Harmony Help Blocking Applications
3-100
PIC32MZ PLIB-based Applications
Name Subdirectory Description
Triangle
Wave
cvref/triangle_wave This example will generate a triangular wave on the CVref output pin.
LED Pattern dma/led_pattern Blinks LEDs on the PIC32MZ Starter-Kit using a pattern stored in flash memory. It
uses the DMA controller to transfer data from flash to the I/O port controlling the
LEDs.
Master-Slave i2c/master_slave The I2C1 module is setup to operate as the master, while the I2C2 module operates
as the slave. The master sends a string to the slave, which stores the data into an
array.
Flash Modify nvm/flash_modify Reads, writes and erases data in the program flash memory.
PWM
Example
oc/oc_pwm Generates a 40KHz PWM with a 25% duty cycle on the OC1 output pin.
Oscillator
Configuration
osc/osc_config Demonstrates how to change the system clock source and PLL values during
run-time.
Blinky Leds ports/blinky_leds Toggles the PIC32MZ Starter-Kit LEDs in an infinite loop.
Change
Notice
ports/cn_interrupt When SW1 is pressed, it triggers a change notice interrupt, which then toggles the
PIC32MZ Starter-Kit LEDs.
Sleep Mode power/sleep_mode This example demonstrates how to put the device into sleep mode and then awake
the device using the watchdog timer.
Reset
Handler
reset/reset_handler This example does checks on various reset flags, assigning each one to an LED. If
the flag is set, the LED is turned on and the reset flag is cleared.
RTCC Alarm rtcc/rtcc_alarm Sets up the RTCC module to function as an alarm, which goes off at 6:00am every
morning.
SPI
Loopback
spi/spi_loopback This example assumes that the SPI SDO (output) is connected to the SDI (input).
Data is then transferred directly from the output to the input and the LEDs are turned
on if the data transfer is successful.
Timer
Example
tmr/timer2_interrupt Uses Timer 2 in 32-bit mode to generate an interrupt every one second, blinking the
LEDs on the PIC32MZ Starter-Kit.
Simple
UART
uart/simple_uart When the PIC32MZ Starter-Kit is connected to a PC with an RS-232 cable, the
device will echo what characters the user types into a terminal program (e.g. Putty).
Simple WDT wdt/simple_wdt Demonstrates how to setup the watchdog timer and detect whether or not a timeout
reset has occurred.
3.4.5 State-Driven Applications
Note: This information was not available at time of release and will be added in a future release of MPLAB Harmony.
3.4 Peripheral Library Example Applications MPLAB Harmony Help State-Driven Applications
3-101
3.5 NVM Driver Demonstration
3.5.1 Introduction
This help file contains instructions and associated information about MPLAB Harmony NVM driver application demonstrations,
which are contained in the MPLAB Harmony Library distribution.
Description
This application demonstrates the capabilities of the MPLAB Harmony NVM driver. This help file describes the hardware
requirement and procedures to build, run the demo project on Microchip development tools. In this demo application, NVM driver
is used to access the internal flash memory of PIC32 MX and PIC32 MZ Devices to perform Write and Read operations and
indicates the result by LED display.
To know more about MPLAB Harmony NVM driver, configuring the NVM driver and API's provided by the NVM driver, refer to
MPLAB Harmony NVM Driver Library documentation.
3.5.2 Release Notes
MPLAB Harmony Version: v0.70b NVM Driver Demonstration Version: 0.01a Release Date: 18Nov2013
New This release:
This is the first release of this NVM Driver demonstration application. This demonstration has been developed to support
PIC32MX and PIC32MZ devices.
Known Issues:
• This Demo application is tested only up to 150 bytes in interrupt mode in PIC32MZ devices
• Changes in NVM driver interfaces will have impact on this demo application as well in subsequent releases
3.5.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
3.5 NVM Driver Demonstration MPLAB Harmony Help SW License Agreement
3-102
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.5.4 Hardware
This section describes how to select and use an appropriate development board and steps to configure the hardware to run this
NVM driver demo.
3.5.4.1 Required Hardware
This section describes the overview of required hardware family and supported demonstration boards for running this NVM driver
demo application.
Description
To run this demonstration project. you will require one of the following sets of hardware.
3.5.4.1.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Following board is supported for PIC32MX devices: -
Demo Board (click link for board information) Notes
PIC32 USB Starter Kit II -
Explorer 16 Development Board -
PIC32MX795F512L Plug-in Module (PIM) -
Following board is supported for PIC32MZ devices: -
Demo Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.5.4.1.2 Hardware Information
Information on hardware used by the NVM driver demo application.
Description
The NVM driver demo application can be tried on different hardware boards. This section provide details on the different
hardware boards that this demo application supports.
3.5 NVM Driver Demonstration MPLAB Harmony Help Hardware
3-103
3.5.4.1.2.1 PIC32 USB Starter Kit II
Provides information on the PIC32 USB Starter Kit II.
Description
SW1 - Application switch. Tied to RD6.
SW2 - Application switch. Tied to RD7.
SW3 - Application switch. Tied to RD13.
LED1 - Application LED. Tied to RD0.
LED2 - Application LED. Tied to RD1.
LED3 - Application LED. Tied to RD2.
More Information
Microchip Part Number : DM320003-2
3.5.4.1.2.2 Explorer 16 Development Board
Provides information on the Explorer 16 Development Board.
3.5 NVM Driver Demonstration MPLAB Harmony Help Hardware
3-104
Description
S1 - Reset button (MCLR)
S2 - Processor switch. This switch determines which processor is running, the processor on the board or the processor on the
Plug-In-Module (PIM).
S3, S4, S5, S6 - Application switches. For information about what pin is connected to this switch, please refer to the information
for the PIM in use.
D3 through D10 - Application LEDs. For information about what pin is connected to this LED, please refer to the information for
the PIM in use.
More Information:
Microchip Part Number: DM240001
3.5.4.1.2.3 PIC32MX795F512L Plug-in Module (PIM)
Provides information on the PIC32MX795F512L Plug-In-Module (PIM).
Description
This PIM is required while using the Explorer 16 Development Board.
3.5 NVM Driver Demonstration MPLAB Harmony Help Hardware
3-105
More Information
Microchip Part Number: MA320003
microchipDIRECT Product Page
3.5.4.1.2.4 PIC32MZ Embedded Connectivity (EC) Starter Kit
Provides information on the PIC32MZ Embedded Connectivity (EC) Starter Kit.
Description
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
3.5 NVM Driver Demonstration MPLAB Harmony Help Hardware
3-106
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.5.4.1.2.5 Multimedia Expansion Board II (MEB II)
Provides information on the Multimedia Expansion Board II (MEB II).
Description
Microchip Part Number: DM320005-2
Product Page
The front side of the MEB II includes these key features, as shown in Figure 1:
1. Display daughter board connector (60-pin Hirose board-to-board connector).
2. mTouch™ buttons.
3. Push Button.
4. Power LED.
5. User LEDs.
6. VGA Camera (OVM7690).
7. PICtail™ Connector.
8. Analog temperature sensor.
3.5 NVM Driver Demonstration MPLAB Harmony Help Hardware
3-107
Figure 1: Multimedia Expansion Board II Layout (Front)
The underside of the MEB II includes these key features, as shown in Figure 2:
1. Regulated 5V and 3.3V power supply for powering the board via a 9-15V DC Adapter.
2. PIC32 Starter Kit connector (168-pin Hirose board-to-board connector).
3. 24-bit stereo audio codec (AK4953A).
4. Integrated 802.11bg wireless module (MRF24WG0MA).
5. Low-cost Bluetooth® HCI transceiver (BTM805).
6. EBI SRAM memory (IS61WV102416BLL).
7. microSD slot.
8. Analog accelerometer (ADXL325).
Figure 2: Multimedia Expansion Board II Layout (Back)
3.5 NVM Driver Demonstration MPLAB Harmony Help Hardware
3-108
3.5.4.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
Explorer 16 Development Board
This demonstration application is demonstrated using Explorer 16 Development Board, PIC32 USB Starter Kit II and PIC32MZ
Embedded Connectivity (EC) Starter Kit. The following hardware configuration should be set up before running this application.
1. Before attaching the PIC32MX795F512L PIM to the Explorer 16 Development Board, ensure that the processor select switch
(S2) is in the PIM Position.
2. Short JP2 on the Explorer 16 Development Board to enable the LEDs.
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.5.5 Building the Application
This section describes how to build this demonstration project.
Description
Once the hardware is configured, you are ready to build this application.
Project Setup :
From the MPLAB X IDE, Select "open project" and browse to this demo location. This demo application is available in "/apps/driver/nvm/nvm_read_write/firmware/nvm_read_write.X". This directory contains all the application related source
files, header files as well as MPLAB X IDE project related workspace files.
How to build this demonstration application:
To build this demo in debug mode, Go to "Run" menu in MPLAB X IDE and select "Build Main Project" or select "Build Main
Project" in toolbar. Once the project gets compiled successfully, you can run this demonstration application.
For more information on how to compile and program projects, refer to the MPLAB X IDE help available through the help menu
in MPLAB X IDE.
Note:The appropriate project configurations should be selected before building the project for the configured hardware.
3.5.5.1 Configuring the Application
This section describes the list of configuration options, build options, and how they are configured for this demonstration
application.
Build options:
This application supports both PIC32MX and PIC32MZ devices. From project properties of MPLAB X IDE, select
"pic32mx_usb_starterkit_II" configuration if the target hardware is a PIC32MX device, or select "pic32mz_sk" configuration if the
3.5 NVM Driver Demonstration MPLAB Harmony Help Building the Application
3-109
target hardware is a PIC32MZ device.
The default target device is "PIC32MX795F512L" for "pic32mx_usb_starterkit_II" configuration and "PIC32MZ2048ECH144" for
"pic32mz_sk" configuration with optimization level as "0". The various optimization levels can be selected from the list to run this
demonstration.
Note: If the target device is changed, the appropriate PIM needs to be used to run this demonstration application.
Configuration options:
All of the demonstration application related configuration options are available in "system_config.h" file. This file is available in
the "apps/driver/nvm/nvm_read_write/firmware/src/system_config/pic32mx_usb_starterkit_II" or "apps/driver/nvm/nvm_read_write/firmware/src/system_config/pic32mz_sk"directory based on the configuration selected.
This file has the following list of configurations:
• General System Clock Services
• NVM Driver
• Interrupt services
Note: Based on the configurations, the demo application behavior will be changed.
3.5.5.2 Configuring the Libraries
This section describes the configuration options provided by MPLAB Harmony Libraries used by the application.
Macro Name Description
#define
DRV_NVM_INSTANCES_NUMBER
This definition selects the maximum number of hardware instances that can be supported
by the dynamic NVM driver
#define
DRV_NVM_CLIENTS_NUMBER
This definition selects the maximum number of clients that the NVM driver can support at
run time
#define
DRV_NVM_INTERRUPT_MODE
This macro controls the operation of the driver in the interrupt mode of operation
#define DRV_NVM_ROW_SIZE This macro defines the row size of target Flash
#define DRV_NVM_PAGE_SIZE This macro selects the NVM page size size
#define NVM_BASE_ADDRESS This macro defines the address to which the data is written and read
3.5.5.3 Customizing the Application
This section explains the steps involved in customizing the existing demonstration application.
Customizing Existing Demonstration Application:
In this demo application, the NVM driver operates in interrupt mode. Following are the steps to be used to customize this
application in olling mode.
1. Change #define DRV_NVM_INTERRUPT_MODE as false in "system_config.h" file
2. Remove the NVM ISR routine from "system_int.c" file
3. Call the DRV_NVM_Tasks function in "system_task.c" file
After changing the above configurations, compile the customized application and program the target device.
3.5 NVM Driver Demonstration MPLAB Harmony Help Running the Application
3-110
3.5.6 Running the Application
This section demonstrates how to run the NVM Driver demonstration.
Description
This is a simple demonstration to show how to configure and make use of NVM driver API's to implement and access on-board
Flash memory of PIC32MX and PIC32MZ devices.
How to run this demonstration application:
Once the demonstration application is compiled successfully, you are ready to program the firmware in the target device.
To run the demonstration in debug mode, below are the steps to be followed.
1. Select appropriate configuration from project properties based on the target hardware.
2. Select your device programmer from the "hardware tool" in MPLAB X IDE.
3. Select the "Debug Main Project" in "Debug" menu or select the "Debug Main Project" in toolbar.
Build the selected configuration in the MPLAB X IDE project and program the demonstration board. The execution status
(pass/fail) of the demonstration is indicated by LEDs on the demonstration board.
Demonstration Board Successful Indication Failure Indication
PIC32 USB Starter Kit II LED2 LED1
PIC32MZ Embedded Connectivity (EC) Starter Kit Green LED Red LED
This demonstration first reads the data from specific NVM address define in system_config.h header file and erases the entire
sector, write 150 bytes of data and reads back. The Pass/Fail criteria is indicated using LEDs as defined above.
3.5.7 Files
This section provides a complete list of source files required by the application and describes the purpose of adding each files.
MPLAB Harmony installation follows a standard directory structure for all application solutions. In this directory structure, the
driver, plib, system services related source files, header files for this demonstration application are available in "/framework/". Below are the list of files added in this demonstration application.
Files Description
driver.h Driver Library Interface Header
drv_common.h This file defines all common macros and definitions used by the driver
drv_nvm.h NVM device driver interface file.
system.h System Service Interface Headers
sys_common.h This file contains system Common definitions and declarations
sys_module.h This file contains system module definitions
system_config.h This is file contains all the system configurations
system_definitions.h This contains system prototypes and definitions
3.5 NVM Driver Demonstration MPLAB Harmony Help Files
3-111
app.h This file contains application related definitions and prototypes
config_performance.c BSP file for Explorer 16 Development Board
drv_nvm_dynamic.c This file contains NVM device driver dynamic implementation
plib_int_pic32.c Interrupt Source implementation for PIC32 devices
sys_int_pic32.c This file contains functions related to the Interrupt System Service for PIC32 devices
app.c This file contains application related implementations
main.c This file contains application's main entry point
system_init.c This file contains source code necessary to initialize the system
system_int.c This file contains a definitions of the raw ISRs required to support the interrupt sub-system
system_tasks.c This file will contain any source code necessary to maintain various tasks in the system
3.5 NVM Driver Demonstration MPLAB Harmony Help Files
3-112
3.6 RTOS Demonstrations
3.6.1 Introduction
RTOS Demonstration Applications Help
Description
This distribution package contains a variety of RTOS based firmware projects that demonstrate the capabilities of the MPLAB
Harmony services and stacks integrated with RTOS running on PIC32 devices. This help file describes the hardware
requirement and procedures to run these firmware projects on Microchip demonstration and development boards.
To learn more about MPLAB Harmony stacks and libraries refer to the related Framework help documentation.
3.6.2 Release Notes
MPLAB Harmony Version: v0.70b RTOS Demonstrations Version: 0.01a Release Date: 18Nov2013
New This Release:
This release contains the FreeRTOS basic project.
Known Issues:
Nothing to report for this release.
3.6.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
3.6 RTOS Demonstrations MPLAB Harmony Help SW License Agreement
3-113
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.6.4 Demonstrations
This topic provides information on how to run the RTOS demonstration applications included in this release.
Description
All demonstrations provided should be built using the MPLAB X IDE development environment tool supplied by Microchip.
The following information communicates the general steps to building the demonstrations.
• Using MPLAB X IDE, click the File drop-down, select "Open Project...". Navigate to your Harmony installation folder. The
default location on Windows will be: C:\Microchip\Harmony\\apps\rtos
• In the \app\rtos folder there will be the demonstration applications.
• Within each demonstration folder, there will be a MPLAB X IDE project specific to each demonstration
• Select the project and click "Open Project"
• To configure the project specific to a preset board configuration, right click on the project and select "Set Configuration"
This will set the build configuration to match the supported board configuration.
3.6.4.1 FreeRTOS_basic_demo
3.6.4.1.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.6.4.1.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstrations
3-114
3.6.4.1.3 Running the Demonstration
Provides instructions on how to build and run the FreeRTOS basic demonstration.
Description
Please use the following procedure to run the demonstration:
1. Load demonstration project into MPLAB X IDE.
2. Connect the mini-B debugger port on-board the PIC32MX or PIC32MZ Starter board to an USB port on the development
computer using the USB cable provided in the kit.
3. Build, Download, and Run demonstration project on the target board.
The demonstration application features the following:
• Application creates one queue and four tasks. One task that sends the data using FreeRTOS queue to the two tasks that
waits for the data in the queue. (QueueReceiveTask2 priority is higher than the QueueReceiveTask1 priority.)
• QueueReceiveTask2 receives the data first, toggles the LED, and then sleeps for the specified time
• QueueReceiveTask1 receives the next data since QueueReceiveTask2 is not in running state
• QueueReceiveTask1 receives the data, toggles the LED and waits for the data arrival
3.6.4.2 uC_OS_III_basic_demo
3.6.4.2.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.6.4.2.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.6.4.2.3 Running the Demonstration
Provides instructions on how to build and run the uC_OS_III basic demonstration.
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstrations
3-115
Description
Demonstration applications are available in the following folders:
• \app\rtos\freeRTOS\gfx
• \app\rtos\uC_OS_III\gfx
• \app\rtos\freeRTOS\basic
• \app\rtos\uC_OS_III\basic
Within each demonstration folder, there will be a MPLAB X IDE project specific to each demonstration
Select the project and click "Open Project"
These demos will show the following:
• <\gfx> The selected RTOS integrated in with the Harmony compliant Graphics stack.
• <\basic> The basic blink LED demo showing the selected RTOS running with the hardware.
Once the demo is up running an LED will toggle every 500ms. This demo will show the RTOS running with the selected
hardware.
3.6.4.3 FreeRTOS RTOS with Graphics
3.6.4.3.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.6.4.3.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.6.4.3.3 Running the Demonstration
Provides instructions on how to build and run the FreeRTOS RTOS with Graphics demonstration.
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstrations
3-116
Description
Demonstration applications are available in the following folders:
• \app\rtos\freeRTOS\gfx
• \app\rtos\uC_OS_III\gfx
• \app\rtos\freeRTOS\basic
• \app\rtos\uC_OS_III\basic
Within each demonstration folder, there will be a MPLAB X IDE project specific to each demonstration
Select the project and click "Open Project"
These demos will show the following:
• <\gfx> The selected RTOS integrated in with the Harmony compliant Graphics stack.
• <\basic> The basic blink LED demo showing the selected RTOS running with the hardware.
Once the demo is up running the screen color on the graphics display will change once every 500ms. A LED will toggle every
500ms.
The projects have been setup to use relative paths from the project folder and must remain under the apps\rtos\ root folders in
order to build correctly.
3.6.4.4 Micrium uC_OS_III with Graphics
3.6.4.4.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.6.4.4.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstrations
3-117
3.6.4.4.3 Running the Demonstration
Provides instructions on how to build and run the Micrium uC_OS_III with Graphics demonstration.
Description
Demonstration applications are available in the following folders:
• \app\rtos\freeRTOS\gfx
• \app\rtos\uC_OS_III\gfx
• \app\rtos\freeRTOS\basic
• \app\rtos\uC_OS_III\basic
Within each demonstration folder, there will be a MPLAB X IDE project specific to each demonstration
Select the project and click "Open Project"
These demos will show the following:
• <\gfx> The selected RTOS integrated in with the Harmony compliant Graphics stack.
• <\basic> The basic blink LED demo showing the selected RTOS running with the hardware.
Once the demo is up running the screen color on the graphics display will change once every 500ms. A LED will toggle every
500ms.
The projects have been setup to use relative paths from the project folder and must remain under the apps\rtos\ root folders in
order to build correctly.
Under the uC_OS_III\ folder, an extra step must be taken to build the project successfully. The RTOS source code and
appropriate port for the selected hardware must be download from Micrium and installed into the follow folder,
\third_party\rtos\.
3.6.5 Demonstration Board Information
3.6.5.1 PIC32 USB Starter Kit II
Provides information on the PIC32 USB Starter II.
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstration Board Information
3-118
Description
SW1 - Application switch. Tied to RD6.
SW2 - Application switch. Tied to RD7.
SW3 - Application switch. Tied to RD13.
LED1 - Application LED. Tied to RD0.
LED2 - Application LED. Tied to RD1.
LED3 - Application LED. Tied to RD2.
More Information
Microchip Part Number : DM320003-2
3.6.5.2 PIC32MZ Embedded Connectivity (EC) Starter Kit
Provides details information on the PIC32MZ Embedded Connectivity (EC) Starter Kit.
Description
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstration Board Information
3-119
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
6. USB Host and OTG power supply for powering PIC32 USB applications.
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstration Board Information
3-120
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstration Board Information
3-121
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.6 RTOS Demonstrations MPLAB Harmony Help Demonstration Board Information
3-122
3.7 SPI Driver Demonstrations
3.7.1 Introduction
This help file contains instructions and associated information about MPLAB Harmony SPI driver application demonstrations,
which are contained in the MPLAB Harmony Library distribution.
Description
This application demonstrates the capabilities of the MPLAB Harmony SPI driver. This help file describes the hardware
requirement and procedures to build, run the demo project on Microchip development tools. In this demo application, SPI driver
is used to access the external EEPROM in the Explorer 16 Development Board to perform Write and Read operations and
indicates the result by LED display.
To know more about MPLAB Harmony SPI driver, configuring the SPI driver and API's provided by the SPI driver, refer to the
SPI Driver Library documentation.
3.7.2 Release Notes
MPLAB Harmony Version: v0.70b SPI Driver Demonstrations Version: 0.01a Release Date: 18Nov2013
New This release:
This is the first release of this SPI driver demonstration application. This demo has been developed to support PIC32MX devices
only. The following demonstration shows the usage of the SPI driver:
• serial_eeprom
Limitations and Known Issues:
• Demo application is only developed and tested in Interrupt mode
• Changes in SPI driver interfaces will have impact on this demo application as well in subsequent releases
• This demo will support to run only on Explorer 16 Development Board
3.7.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
3.7 SPI Driver Demonstrations MPLAB Harmony Help SW License Agreement
3-123
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.7.4 Hardware
This section describes how to select and use an appropriate development board and steps to configure the hardware to run this
SPI driver demo.
3.7.4.1 Required Hardware
This section describes the overview of required hardware family and supported demonstration boards for running this SPI driver
demo application.
Description
To run this demonstration project. you will require one of the following sets of hardware.
3.7.4.1.1 Supported Demonstration Boards
The following demo boards are supported in this release.
Description
Demonstration Board Notes
Explorer 16 Development board -
3.7.4.1.2 Hardware Information
Information on hardware used by the SPI driver demo application.
Description
The SPI driver demo application can be tried across on hardware boards. This section provide details on the different hardware
boards that are used by the demo application.
3.7.4.1.2.1 Explorer 16 Development Board
Provides information on the Explorer 16 Development Board .
3.7 SPI Driver Demonstrations MPLAB Harmony Help Hardware
3-124
Description
S1 - Reset button (MCLR)
S2 - Processor switch. This switch determines which processor is running, the processor on the board or the processor on the
Plug-In-Module (PIM).
S3, S4, S5, S6 - Application switches. For information about what pin is connected to this switch, please refer to the information
for the PIM in use.
D3 through D10 - Application LEDs. For information about what pin is connected to this LED, please refer to the information for
the PIM in use.
More Information:
Microchip Part Number: DM240001
3.7.4.1.2.2 PIC32MX795F512L Plug-in Module (PIM)
Provides information on the PIC32MX795F512L Plug-In-Module (PIM).
Description
This PIM is required while using the Explorer 16 Development Board.
3.7 SPI Driver Demonstrations MPLAB Harmony Help Hardware
3-125
More Information
Microchip Part Number: MA320003
Information Sheet
3.7.4.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
serial_eeprom demo
This application is demonstrated using Explorer 16 Development Board. the following hardware configuration should be done
before running this application.
1. Before attaching the PIC32MX795F512L PIM to the Explorer 16 Development Board, ensure that the processor select switch
(S2) is in the PIM Position.
2. Short JP2 on the Explorer 16 Development Board to enable the LEDs.
Complete the previously described hardware configuration setup to to run this demo.
3.7.5 Building the Application
This section describes how to build this demo project.
Description
Once the hardware is configured, you are ready to build this application.
Project Setup :
From MPLAB X IDE, Select "open project" and browse to this demo location. This demo application is available in "/apps/driver/spi/serial_eeprom.X". This directory contains all the application related source files, header files as well as
MPLAB X IDE project related workspace files.
How to build this demo application:
To build this demo in debug mode, Go to "Run" menu in MPLAB X IDE and select "Build Main Project" or select "Build Main
Project" in toolbar. Once the project gets compiled successfully, you can run this demo application.
For more information on how to compile and program projects, refer to the MPLAB X IDE help available through the help menu
in MPLAB X IDE.
Note: The appropriate project configurations should be selected before building the project for the configured hardware.
3.7.5.1 Customizing the Application
This section explains the steps involved in customizing the existing demo application.
Customizing Existing Demo Application:
In this demo application, the SPI driver is operates in interrupt mode. Below are the steps to be followed to customize this
application in polling mode.
3.7 SPI Driver Demonstrations MPLAB Harmony Help Building the Application
3-126
1. Change #define DRV_SPI_INTERRUPT_MODE as false in "system_config.h" file
2. Remove the SPI interrupt source Priority and sub priority set functions calls from "system_init.c" file
3. Remove the SPI ISR routine from "system_int.c" file
4. Call the DRV_SPI_Tasks function in "system_task.c" file
After changing the above configurations, compile the customized application and program the target device.
3.7.5.2 Configuring the Libraries
This section describes the configuration options provided by MPLAB Harmony Libraries used by the application.
#define DRV_SPI_INSTANCES_NUMBER This definition selects the maximum number of hardware instances that can
be supported by the dynamic SPI driver
#define DRV_SPI_CLIENTS_NUMBER This definition selects the maximum number of clients that the SPI driver can
support at run time
#define DRV_SPI_INTERRUPT_MODE This macro controls the operation of the driver in the interrupt mode of
operation
#define DRV_SPI_PORTS_REMAP_USAGE This macro selects the SPI pins remap
#define DRV_SPI_BUFFER_SIZE This macro selects the SPI buffer size
#define
DRV_SPI_FRAME_SYNC_PULSE_DIRECTION
This macro selects the SPI frame sync pulse direction
#define
DRV_SPI_FRAME_SYNC_PULSE_POLARITY
This macro selects the SPI frame sync pulse polarity
#define
DRV_SPI_FRAME_SYNC_PULSE_EDGE
This macro selects the SPI frame sync pulse edge
3.7.5.3 Configuring the Application
This section describes the list of configuration options , build options and how they are configured for this demo application.
Build options:
This application supports only to demonstrate the SPI driver in master mode. This option "spi_master_explorer16" can be
selected from the project properties in MPLAB X IDE or from the configuration drop down in toolbar.
The default target device is selected as "PIC32MX795F512L" with optimization level as "0". The various optimization levels can
be selected from the list to run this demo.
Note: If the target device is changed, then appropriate PIM needs to be used to run this demo application
Configuration options:
All the demo application related configuration options are available in "system_config.h" file. This file is available in the "/apps/driver/spi/src/system_config/" directory based on the configured hardware. This file has the followingconfigurations,
• General System Clock Services
• SPI Driver
Note: Based on the configurations, the demo application behavior will be changed.
3.7 SPI Driver Demonstrations MPLAB Harmony Help Running the Application
3-127
3.7.6 Running the Application
This section demonstrates how to run the SPI driver demo.
Description
This is a simple demo to show how to configure and make use of SPI driver API's to implement and access on board EEPROM
chip in the Explorer 16 Development Board.
How to run this demo application
Once the demo application is compiled successfully, you are ready to program the firmware in the target device.
To run the demo in debug mode, below are the steps to be followed.
1. Select your device programmer from the "hardware tool" in MPLAB X IDE.
2. Select the "Debug Main Project" in "Debug" menu or select the "Debug Main Project" in toolbar.
Once the device is successfully programmed, you can observe LED in the Explorer 16 Development Board will be turned ON.
This shows the demo project has ran successfully and based on the LED "D4" or "D3" the demo application indicates the
PASS/FAIL.
Notes:
If LED "D3" is turned ON, it indicates the EEPROM W/R functionality has failed.
If LED "D4" is turned ON, it indicates the EEPROM W/R functionality has passed.
3.7.7 Files
This section provides a complete list of source files required by the application and describes the purpose of adding each files.
MPLAB Harmony installation follows a standard directory structure for all application solutions. In this directory structure, the
driver, plib, system services related source files, header files for this demo application are available in "/framework/". Below are the list of files added in this demo application.
Files Description
driver.h Driver Library Interface Header
drv_common.h This file defines all common macros and definitions used by the driver
drv_spi.h SPI device driver interface file.
system.h System Service Interface Headers
sys_common.h This file contains system Common definitions and declarations
sys_module.h This file contains system module definitions
system_config.h This is file contains all the system configurations
system_definitions.h This contains system prototypes and definitions
app.h This file contains application related definitions and prototypes
config_performance.c BSP file for Explorer 16 Development Board
drv_spi_dynamic.c This file contains SPI device driver dynamic implementation
3.7 SPI Driver Demonstrations MPLAB Harmony Help Files
3-128
plib_int_pic32.c Interrupt Source implementation for PIC32 devices
sys_clk.c This file contains clock system service implementation
sys_clk_pic32.c This file contains clock system service implementation specific to PIC32 devices
sys_queue.c This file contains system queue services
sys_int_pic32.c This file contains functions related to the Interrupt System Service for PIC32 devices
sys_ports.c This file contains Ports System Service interface implementation.
app.c This file contains application related implementations
main.c This file contains application's main entry point
system_init.c This file contains source code necessary to initialize the system
system_int.c This file contains a definitions of the raw ISRs required to support the interrupt sub-system
system_tasks.c This file will contain any source code necessary to maintain various tasks in the system
3.7 SPI Driver Demonstrations MPLAB Harmony Help Files
3-129
3.8 TCP/IP Demonstrations
3.8.1 Introduction
TCP/IP Web Server Demonstration Applications Help
Description
Note: This information was not available at time of release and will be added in a future release of MPLAB Harmony.
3.8.2 Release Notes
MPLAB Harmony Version: v0.70b TCP/IP Demonstrations Version: 0.01a Release Date: 18Nov2013
The interface can change in the beta and\or 1.0 release.
New This Release:
Nothing to report for this release.
Known Issues:
Nothing to report for this release.
3.8.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstrations
3-130
3.8.4 Demonstrations
Description of TCP/IP Stack Library Demonstration Application
Description
This section describes Microchip's TCP/IP Demonstration projects, including information about demonstration-hardware
compatibility and also provides the information about how to configure and run the demonstration.
3.8.4.1 web_server
3.8.4.1.1 pic32_ethernet_starter_kit
This section describes the steps necessary to begin using Microchip's TCP/IP Web server Demonstration Application.
Description
This section describes Microchip's TCP/IP Web Server Demonstration project, including information about
demonstration-hardware compatibility and also provides the information about how to configure and run the demonstration.
3.8.4.1.1.1 Supported Hardware
Lists supported demonstration and development hardware boards.
Description
Demo Board (click link for board information) Notes
PIC32 Ethernet Starter Kit --
PIC32MZ Embedded Connectivity (EC) Starter Kit --
3.8.4.1.1.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
No hardware related configuration or jumper setting changes are necessary.
3.8.4.1.1.3 Running the Demonstration
Provides instructions on how to build and run the TCP/IP Web Server demonstration.
Description
This demonstration hosts a HTTP server when connected to a network. To view the web page hosted by the demonstration
application open a web browser, type http://mchpboard in the address bar and press the enter key.
Please use the following procedure to run the demonstration:
1. Load demonstration project into MPLAB X IDE.
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstrations
3-131
2. Connect the mini-B debugger port on-board the PIC32MZ Embedded Connectivity (EC) Starter Kit or PIC32MZ Ethernet
Starter Kit board to an USB port on the development computer using the USB cable provided in the kit.
3. Connect the RJ-45 Ethernet port on the PIC32MZ Embedded Connectivity (EC) Starter Kit or PIC32MZ Ethernet Starter Kit
board to a network hub or an Ethernet port on the development computer using the Ethernet patch cord provided in the kit.
4. Build, Download, and Run demonstration project on the target board.
5. A HTTP server is hosted by the demonstration application. Open a web browser, type http://mchpboard in the address bar and
press the enter key.
The demonstration application features following:
a) Real-time hardware control and Dynamic Variables - On the Overview page the the LEDs can be clicked to toggle LEDs on
the Ethernet Starter Board. The buttons on Ethernet Starter Board can be pressed to see the Buttons on the webpage toggle.
The dynamic variables can be updated in real time on the HTTP server.
b) Form Processing - Input can be handled from the client by using GET and POST methods.
c) Authentication - Shows an example to restricted access feature commonly used.
d) File Uploads - Shows an example of file upload using POST method. The HTTP server can accept a user defined
MPFS/MPFS2 image file for webpages.
e) Board Configuration - MAC address, host name and IP address of the PIC32 Ethernet starter board can be viewed in the
Network Configuration page and some configuration can be updated.
Note: LED functionality part of the demonstration is not implemented for PIC32MZ devices.
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstrations
3-132
3.8.4.1.2 web_server_sdcard_fatfs
This section describes the steps necessary to begin using Microchip's TCP/IP Web server Demonstration Application.
Description
The TCP/IP SDCARD FATFS web server demo (‘apps/tcpip/web_server_sdcard_fatfs/firmware/pic32_ethernet_starter_kit.X’)
exercises the HTTP web server running on PIC32 devices. SDCARD (Secure Digital Card) FATFS (File Allocation Table File
System) web server demo has the web pages stored in external SD CARD and accessed through FATFS API. This demo
currently only works with PIC32MZ using the Multimedia Expansion Board II (MEB II) Setup. PIC32MZ Testing and Fixes in
progress.
3.8.4.1.2.1 Supported Hardware
Lists supported demonstration and development hardware boards.
Description
Demo Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit --
Multimedia Expansion Board II (MEB II) --
3.8.4.1.2.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
• Plug the PIC32MZ Embedded Connectivity (EC) Starter Kit into application board connector on the MEB II
• Make sure a microSD card is formatted and loaded with the web pages provided under
‘apps/tcpip/web_server_sdcard_fatfs/firmware/src/web_pages2_sdcard’ directory
• Insert the microSD card with the web pages into the microSD card slot (J8) on the MEB II
3.8.4.1.2.3 Running the Demonstration
This section provides instructions on how to build and run the TCP/IP SD CARD FS Web Server demonstration.
Description
To view the web page hosted by the demonstration application open a web browser, type http://mchpboard_e in the address bar
and press the Enter key.
Please use the following procedure to run the demonstration:
1. Load demonstration project into MPLAB X IDE.
2. Connect the mini-B debugger port on-board the PIC32MZ Embedded Connectivity (EC) Starter Kit or PIC32MZ Ethernet
Starter Kit to a USB port on the Development computer using the USB cable provided in the kit.
3. Connect the RJ-45 Ethernet port on the PIC32MZ Embedded Connectivity (EC) Starter Kit or PIC32MZ Ethernet Starter Kit
board to a network hub or an Ethernet port on the development computer using the Ethernet patch cord provided in the kit.
4. Make sure the microSD card with the web pages is inserted into the microSD card slot on the MEB II.
5. Build, Download, and Run demonstration project on the target board.
6. A HTTP server is hosted by the demonstration application. Open a web browser, type http://mchpboard_e in the address bar
and press the Enter key. The demonstration application features following:
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstrations
3-133
a. Real-time hardware control and Dynamic Variables - On the Overview page the LEDs can be clicked to toggle LEDs on the
Ethernet Starter Board. The buttons on Ethernet Starter Board can be pressed to see the Buttons on the web page toggle. The
dynamic variables can be updated in real time on the HTTP server.
Note: LED functionality part of the demonstration is somewhat limited due to errata items related to the functional multiplexing on
GPIO and Ethernet pins.
b. Form Processing - Input can be handled from the client by using GET and POST methods.
c. Authentication - Shows an example to restricted access feature commonly used.
d. Cookies – Shows the example of storing small text stings on the client side.
e. File Uploads - Shows an example of file upload using POST method. The HTTP server can accept a user defined
MPFS/MPFS2 image file for web pages.
f. Send E-mail – Shows a simple SMTP POST methods.
g. Dynamic DNS – Exercise Dynamic DNS capabilities.
h. Network Configuration - MAC address, host name and IP address of the PIC32 Ethernet starter board can be viewed in the
Network Configuration page and some configuration can be updated.
3.8.4.1.3 web_server_nvm_mpfs
This section describes the steps necessary to begin using Microchip's TCP/IP Web server Demonstration Application.
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstrations
3-134
Description
The TCP/IP NVM MPFS web server demo (‘apps/tcpip/web_server_nvm_mpfs/firmware/pic32_ethernet_starter_kit.X’) exercises
the HTTP web server running on PIC32 devices. The Non-Volatile Memory (NVM) MPFS (Microchip Proprietary File System)
web server demonstration has the web pages stored in internal Flash and accessed through the MPFS API.
3.8.4.1.3.1 Supported Hardware
Lists supported demonstration and development hardware boards.
Description
Demo Board (click link for board information) Notes
PIC32 Ethernet Starter Kit --
PIC32MZ Embedded Connectivity (EC) Starter Kit --
3.8.4.1.3.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
No hardware related configuration or jumper setting changes are necessary.
3.8.4.1.3.3 Running the Demonstration
This section provides instructions on how to build and run the TCP/IP Web Server demonstration.
Description
To view the web page hosted by the demonstration application open a web browser, type http://mchpboard_e in the address bar
and press the enter key.
Please use the following procedure to run the demonstration:
1. Load demonstration project into MPLAB X IDE.
2. Connect the mini-B debugger port on-board the PIC32MZ Embedded Connectivity (EC) Starter Kit or PIC32MZ Ethernet
Starter KitStarter board to a USB port on the Development computer using the USB cable provided in the kit.
3. Connect the RJ-45 Ethernet port on the PIC32MZ Embedded Connectivity (EC) Starter Kit or PIC32MZ Ethernet Starter Kit
board to a network hub or an Ethernet port on the development computer using the Ethernet patch cord provided in the kit.
4. Build, Download, and Run demonstration project on the target board.
5. A HTTP server is hosted by the demonstration application. Open a web browser, type http://mchpboard_e in the address bar
and press the enter key. The demonstration application features following:
a. Real-time hardware control and Dynamic Variables - On the Overview page the LEDs can be clicked to toggle LEDs on the
Ethernet Starter Board. The buttons on Ethernet Starter Board can be pressed to see the Buttons on the web page toggle. The
dynamic variables can be updated in real time on the HTTP server.
Note: LED functionality part of the demonstration is somewhat limited due to errata items related to the functional multiplexing on
GPIO and Ethernet pins.
b. Form Processing - Input can be handled from the client by using GET and POST methods.
c. Authentication - Shows an example to restricted access feature commonly used.
d. Cookies – Shows the example of storing small text stings on the client side.
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstrations
3-135
e. File Uploads - Shows an example of file upload using POST method. The HTTP server can accept a user defined
MPFS/MPFS2 image file for web pages.
f. Send E-mail – Shows a simple SMTP POST methods.
g. Dynamic DNS – Exercise Dynamic DNS capabilities.
h. Network Configuration - MAC address, host name and IP address of the PIC32 Ethernet starter board can be viewed in the
Network Configuration page and some configuration can be updated.
3.8.5 Demonstration Board Information
Information on Hardware used by the TCP/IP Demonstration Applications.
Description
This section provide details on the different hardware boards that are used by the demonstration applications.
3.8.5.1 PIC32 Ethernet Starter Kit
Information on PIC32 Ethernet Starter Kit Hardware.
Description
This board provides a low-cost, modular development system for Microchip’s line of 32-bit Microcontrollers (MCUs)
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstration Board Information
3-136
PIC32 Ethernet Starter Kit
More Information
Microchip Part Number: DM320004
Microchip Product Page
3.8.5.2 PIC32MZ Embedded Connectivity (EC) Starter Kit
Information on the PIC32MZ Embedded Connectivity (EC) Starter Kit.
Description
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstration Board Information
3-137
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstration Board Information
3-138
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstration Board Information
3-139
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.8.5.3 Multimedia Expansion Board II (MEB II)
Provides details information on the Multimedia Expansion Board II (MEB) II.
Description
Microchip Part Number: DM320005-2
Product Page
The front side of the MEB II includes these key features, as shown in Figure 1:
1. Display daughter board connector (60-pin Hirose board-to-board connector).
2. mTouch™ buttons.
3. Push Button.
4. Power LED.
5. User LEDs.
6. VGA Camera (OVM7690).
7. PICtail™ Connector.
8. Analog temperature sensor.
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstration Board Information
3-140
Figure 1: Multimedia Expansion Board II Layout (Front)
The underside of the MEB II includes these key features, as shown in Figure 2:
1. Regulated 5V and 3.3V power supply for powering the board via a 9-15V DC Adapter.
2. PIC32 Starter Kit connector (168-pin Hirose board-to-board connector).
3. 24-bit stereo audio codec (AK4953A).
4. Integrated 802.11bg wireless module (MRF24WG0MA).
5. Low-cost Bluetooth® HCI transceiver (BTM805).
6. EBI SRAM memory (IS61WV102416BLL).
7. microSD slot.
8. Analog accelerometer (ADXL325).
Figure 2: Multimedia Expansion Board II Layout (Back)
3.8 TCP/IP Demonstrations MPLAB Harmony Help Demonstration Board Information
3-141
3.9 USART Driver Demonstration
3.9.1 Introduction
This help manual contains instructions and information about MPLAB Harmony USART driver demo application, which are
contained in the MPLAB Harmony Library distribution.
Description
This application demonstrates how to use the MPLAB Harmony USART driver. This help manual describes the hardware
requirement and procedures to build and execute the demo project on Microchip development tools. In this demo application,
USART driver will initially transmit strings of data and then accept and characters received and transmit the data back. Error or
success status is indicated by LED display.
To know more about MPLAB Harmony USART driver, configuring the USART driver and API's provided by the USART driver,
refer to USART Driver Library documentation.
3.9.2 Release Notes
MPLAB Harmony Version: v0.70b USART Driver Demonstration: 0.01a Release Date: 18Nov2013
New This Release:
This is the first release of this USART driver demo application. This demo has been developed to support PIC32MX devices only.
Known Issues:
• Changes in USART driver interfaces will have impact on this demo application as well in subsequent releases
• This demo is has not been developed to run on PIC32MZ devices. Users must add a new configuration if intended to run on
PIC32MZ devices.
3.9.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
3.9 USART Driver Demonstration MPLAB Harmony Help SW License Agreement
3-142
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.9.4 Hardware
This section describes how to select and use an appropriate development board and steps to configure the hardware to run this
USART driver demo.
3.9.4.1 Required Hardware
This section describes the overview of required device family and supported demonstration boards to run this USART driver
demo application.
Description
This section describes the hardware required to execute the Harmony USART driver demo application.
3.9.4.1.1 Supported Demonstration Boards
Lists supported demonstration and hardware development boards.
Description
Demonstration Board Notes
Explorer 16 Development Board -
3.9.4.1.2 Hardware Information
Information on hardware used by the USART driver demo application.
Description
The USART driver demo application can be tried across on hardware boards. This section provide details on the different
hardware boards that are used by the demo application.
3.9.4.1.2.1 Explorer 16 Development Board
Provides information on the Explorer 16 Development Board .
3.9 USART Driver Demonstration MPLAB Harmony Help Hardware
3-143
Description
S1 - Reset button (MCLR)
S2 - Processor switch. This switch determines which processor is running, the processor on the board or the processor on the
Plug-In-Module (PIM).
S3, S4, S5, S6 - Application switches. For information about what pin is connected to this switch, please refer to the information
for the PIM in use.
D3 through D10 - Application LEDs. For information about what pin is connected to this LED, please refer to the information for
the PIM in use.
More Information:
Microchip Part Number: DM240001
3.9.4.1.2.2 PIC32MX795F512L Plug-in Module (PIM)
Provides information on the PIC32MX795F512L Plug-In-Module (PIM).
Description
This PIM is required while using the Explorer 16 Development Board.
3.9 USART Driver Demonstration MPLAB Harmony Help Hardware
3-144
More Information
Microchip Part Number: MA320003
Information Sheet
3.9.4.2 Configuring the Hardware
This section describes how to configure the supported hardware.
Description
Explorer 16 Development Board
Below are the hardware hardware configuration settings required to execute this demo
1. Before attaching the PIC32MX795F512L PIM to the Explorer 16 Deveolpment Board, ensure that the processor select switch
(S2) is in the PIM Position.
2. Short JP2 on the Explorer 16 Development Board to enable the LEDs.
3.9.5 Building the Application
This section describes how to build this demo project.
3.9 USART Driver Demonstration MPLAB Harmony Help Building the Application
3-145
Description
Once the hardware is configured, you are ready to build this application.
Project Setup:
From MPLAB X IDE, Select "open project" and browse to this demo project location. This demo application is available in
"/apps/driver/usart/usart_echo/firmware/usart_echo.X". This directory contains all the application related source
files, header files as well as MPLAB X IDE project related workspace files.
How to build this demo application:
To build this demo in debug mode, Go to "Run" menu in MPLAB X IDE and select "Build Main Project" or select "Build Main
Project" in toolbar. Once the project gets compiled successfully, you can run this demo application.
For more information on how to compile and program projects, refer to the MPLAB X IDE help available through the help menu
in MPLAB X IDE.
Note: The appropriate project configurations should be selected before building the project for the configured hardware.
3.9.5.1 Configuring the Application
This section describes the list of configuration options , build options and how they are configured for this demo application.
Build options:
The default target device is selected as "PIC32MX795F512L" with optimization level as "0". The various optimization levels can
be selected from the list to run this demo.
Note: If the target device is changed, then appropriate PIM needs to be used to run this demo application
Configuration options:
All the demo application related configuration options are available in "system_config.h" file. This file is available in the "apps/driver/usart/usart_echo/firmware/src/system_config/pic32mx_default" directory based on the configured hardware.
Note: Based on the configurations, the demo application behavior will be changed.
3.9.5.2 Configuring the Libraries
This section describes the configuration options provided by MPLAB Harmony Libraries used by the application. The below
parameters are defined in "system_config.h" header file.
Parameter Name Description
#define
DRV_USART_INSTANCES_NUMBER
This macro defines the maximum number of hardware instances that will be used
by the application. The USART driver will support a maximum of that many
hardware instances.
#define
DRV_USART_CLIENTS_NUMBER
This macro defines the maximum number of clients that will be used by the
application. The USART driver will support a maximum of that many clients.
#define
DRV_USART_INTERRUPT_MODE
If this macro is set to "true", the application will run in interrupt mode. If this macro
is set to "false", the application will run in polling mode
#define
DRV_USART_INTERRUPT_SOURCE_TX
This macro defines the transmit interrupt source
#define
DRV_USART_INTERRUPT_SOURCE_RX
This macro defines the receive interrupt source
3.9 USART Driver Demonstration MPLAB Harmony Help Building the Application
3-146
#define SYS_USART_ID This macro defines the USART module number used in the appilcation
#define
DRV_USART_XFER_BUFFER_NUMBER
This macro defines the number of transfer buffers used in the application
#define APP_UART_BAUDRATE This macro defines the baud rate to be used
3.9.5.3 Customizing the Application
This section explains the steps involved in customizing the existing demo application.
Customizing Existing Demo Application:
Changing the USART module
In system_config.h header file, modify the SYS_USART_ID macro to change the USART module number.
Changing the demo to interrupt mode
By default, the USART demo application will run in polling mode. Below are the steps to be followed to run the demo in interrupt
mode.
1. Change #define DRV_USART_INTERRUPT_MODE to true in "system_config.h" file
2. Remove the DRV_USART_Tasks function call in sys_tasks in "system_task.c" file
3. Call the DRV_USART_Tasks function in ISR in "system_int.c" file
Changing USART settings
To change the USART related parameters such as baud rate, parity settings, number of stop bits, etc., select appropriate values
in drvUSARTInit structure in system_init.c file
After changing the above configurations, compile the customized application and program the target device.
3.9.6 Running the Application
This section demonstrates how to run the USART driver demo.
Description
Once the demo application has been compiled successfully for the intended configuration, program the firmware into the target
device.
Upon execution, the application will transmit the following strings through USART with settings as defined in the application.
/****************************************************
Welcome to Microchip USART Echo Demo App.
Press any character. Data will be echoed back.
Press 'ESC' key to exit the application
/****************************************************
After transmitting the above text, the firmware will read any characters received through USART and it will transmit back the
same data. If the received character is "ESC" (0x1B), the program will enetr into idle mode. Once in Idle mode, the firmware will
neither transmit nor receive any data. If the application enters Idle mode, LED 5 of the Explorer 16 Development Board will
3.9 USART Driver Demonstration MPLAB Harmony Help Running the Application
3-147
illuminate. If any error occurs, LED 9 of the Explorer 16 Development Board will illuminate.
3.9.7 Files
This section provides a complete list of source and header files used by the application and describes the purpose of adding
each files.
MPLAB Harmony installation follows a standard directory structure for all application solutions. In this directory structure, the
driver, plib, system services related source files, header files for this demo application are available in "/framework/". Below are the list of files added in this demo application.
Files Description
driver.h Driver Library Interface Header
drv_common.h This file defines all common macros and definitions used by the driver
drv_usart.h USART device driver interface file.
system.h System Service Interface Headers
sys_common.h This file contains system Common definitions and declarations
sys_module.h This file contains system module definitions
system_config.h This is file contains all the system configurations
system_definitions.h This contains system prototypes and definitions
app.h This file contains application related definitions and prototypes
config_performance.c BSP file for the Explorer 16 Development Board
drv_usart_dynamic.c This file contains USART device driver dynamic implementation
plib_int_pic32.c Interrupt Source implementation for PIC32 devices
sys_clk.c This file contains clock system service implementation
sys_clk_pic32.c This file contains clock system service implementation specific to PIC32 devices
sys_queue.c This file contains system queue services
sys_int_pic32.c This file contains functions related to the Interrupt System Service for PIC32 devices
sys_ports.c This file contains Ports System Service interface implementation.
app.c This file contains application related implementations
main.c This file contains application's main entry point
system_init.c This file contains source code necessary to initialize the system
system_int.c This file contains a definitions of the raw ISRs required to support the interrupt sub-system
system_tasks.c This file will contain any source code necessary to maintain various tasks in the system
3.9 USART Driver Demonstration MPLAB Harmony Help Files
3-148
3.10 USB Demonstrations
3.10.1 USB Demonstrations
3.10.1.1 Introduction
USB Library Demonstration Applications Help
Description
This distribution package contains a variety of USB-related firmware projects that demonstrate the capabilities of the MPLAB
Harmony USB stack. This help file describes the hardware requirement and procedures to run these firmware projects on
Microchip demonstration and development boards.
To know more about MPLAB Harmony USB stack and configuring the USB stack and the APIs provided by the USB stack, refer
to the USB Library documentation.
3.10.1.2 Release Notes
MPLAB Harmony Version: v0.70b USB Demonstration: 0.01a Release Date: 18Nov2013
New This Release:
Nothing to report in this release.
Known Issues:
Device Stack Demonstration Applications:
All Device Stack Demonstration applications uses a custom Board Support Package (BSP) to access demonstration board
switches and LEDs. The board support package does not use PORTS Peripheral Library. In the next release, all Device Stack
Demonstration Applications will be updated to use the standard Harmony BSP. The demonstration application specific issues are
listed here:
cdc_com_port_single:
Nothing to report in this release.
cdc_com_port_dual:
Nothing to report in this release.
cdc_serial emulator:
• This version of the demo does not support baud rate change. The supported baud rate is 9600bps, 1 stop bit and no parity.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-149
• The application code accesses the UART2 peripheral SFR directly. This will be updated in the next release to use the USART
driver and the System Clock Service.
hid_basic:
Nothing to report in this release.
hid_keyboard:
Nothing to report in this release.
hid_joystick:
Nothing to report in this release.
hid_mouse:
Nothing to report in this release.
audio_speaker:
While running the pic32mz_sk_meb2_int_dyn configuration, a periodic glitch is heard in the output audio. This is a known issue
and will be fixed in the next release of the stack.
Host Stack Demonstration Applications:
All Host Stack Demonstration applications uses a custom Board Support Package (BSP) to access demonstration board
switches and LEDs. The board support package does not use PORTS Peripheral Library. In the next release, all Host Stack
Demonstration Applications will be updated to use the standard Harmony BSP.
cdc_basic:
This demo is not tested for the pic32mx_usb_sk_int_dyn configuration and may not function when built for this configuration.
msd_basic:
While running this demo, if the USB Flash drive already contains a file named “File.txt”, the file contents may become corrupted.
3.10.1.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-150
3.10.1.4 Demonstration Application Configurations
This topic provides information on the USB demonstration project configuration that are available in MPLAB Harmony.
Description
The available USB Demonstration application MPLAB X IDE projects feature support for multiple configurations. Selecting these
configurations allow for the demonstration projects to run across different PIC32 microcontrollers and development boards. The
following project configurations are available:
• pic32mx_usb_sk_int_dyn – Selecting this configuration will set up the demonstration application to run on the PIC32 USB
Starter Kit II development board, with the PIC32MX795F512L microcontroller. The system will be configured for interrupt
mode operation and drivers will be configured for dynamic operation mode.
• pic32mz_sk_int_dyn – Selecting this configuration will set up the demonstration application to run on the PIC32MZ
Embedded Connectivity (EC) Starter Kit development board, with the PIC32MZ2048ECH144 microcontroller. The system will
be configured for interrupt mode operation and drivers will be configured for dynamic operation mode.
• explorer16_pic32mx795f512l_int_dyn – Selecting this configuration will set up the demonstration application to run on the
Explorer 16 Development Board along with the PIC32MX795F512L microcontroller Plug In Module . The system will be
configured for interrupt mode operation and drivers will be configured for dynamic operation mode.
• pic32mx_usb_audio_int_dyn - Selecting this configuration will set up the demonstration application to run on PIC32 USB
Digital Audio Accessory Board along with the PIC32MX250F128B microcontroller. The system will be configured for interrupt
mode operation and drivers will be configured for dynamic operation mode.
• pic32mz_sk_meb2_int_dyn – Selecting this configuration will set up the demonstration application to run on the PIC32MZ
EC Starter Kit development board, with the PIC32MZ2048ECH144 microcontroller board attached to the Multimedia
Expansion Board II (MEB II). The system will be configured for interrupt mode operation and drivers will be configured for
dynamic operation mode.
The following figure shows how a configuration can be selected in MPLAB X IDE.
Alternatively, the active configuration can be selected in the Project Properties dialog box. The following table shows the
availability of a configuration across available USB device demonstration applications. Green indicates support. Red indicates no
support.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-151
The following table shows the availability of a configuration across available USB device demonstration applications. Green
indicates support. Red indicates no support.
3.10.1.5 Demonstrations
Description of USB Demonstrations
Description
The USB Demonstrations are grouped into USB Device Stack and USB Host Stack Demonstrations.
3.10.1.5.1 Device
3.10.1.5.1.1 cdc_com_port_single
Demonstrates a USB CDC device, emulating a serial COM port.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-152
Description
This demonstration application creates a USB CDC Device that enumerates as a single COM port on the host PC. The
application demonstrates two-way communication between the USB device and the PC host.
3.10.1.5.1.1.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.10.1.5.1.1.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.10.1.5.1.1.3 Running the Demonstration
Provides instructions on how to build and run the CDC single COM port demonstration.
Description
This demonstration allows the device to appear like a serial (COM) port to the host. In order to run this demonstration first
compile and program the target device. While compiling, select the pic32mx_usb_sk_xxx_xxx configurations for the PIC32M
USB Starter Kit II or select the pic32mz_sk_xxx_xxx configurations for PIC32MZ Embedded Connectivity (EC) Starter Kit. Attach
the device to the host. If the host is a PC and this is the first time you have plugged this device into the computer then you may
be asked for a .inf file.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-153
Select the “Install from a list or specific location (Advanced)” option. Point to the “/apps/usb/device/cdc_com_port_single/inf” directory.
Once the device is successfully installed, open up a terminal program, such as HyperTerminal. Select the appropriate COM port.
On most machines this will be COM5 or higher.
Once connected to the device, there are two ways to run this example project. Typing a key in the terminal window will result in
the device echoing the key pressed. So if the user presses “b”, the device will echo “c”. If the pushbutton SW1 is pressed the
device will echo "PUSH BUTTON PRESSED" to the terminal window.
Note: Some terminal programs, like HyperTerminal, require users to click the disconnect button before removing the device from
the computer. Failing to do so may result in having to close and open the program again in order to reconnect to the device.
3.10.1.5.1.2 cdc_com_port_dual
Demonstrates a USB CDC device, emulating dual serial COM ports - one looping back into the other.
Description
This demonstration application creates a USB CDC Device that enumerates as 2 serial ports on USB Host PC. This application
demonstrates the ability of the MPLAB Harmony USB stack to support multiple instances of the same device class.
3.10.1.5.1.2.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.10.1.5.1.2.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-154
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.10.1.5.1.2.3 Running the Demonstration
Provides instructions on how to build and run the CDC dual COM port demonstration.
Description
This demonstration allows the device to appear like dual serial (COM) ports to the host. In order to run this demonstration first
compile and program the target device. While compiling, select the pic32mx_usb_sk_xxx_xxx configurations for the PIC32 USB
Starter Kit II or select the pic32mz_sk_xxx_xxx configurations for PIC32MZ Embedded Connectivity (EC) Starter Kit. Attach the
device to the host. If the host is a PC and this is the first time you have plugged this device into the computer then you may be
asked for a .inf file.
Select the “Install from a list or specific location (Advanced)” option. Point to the “/apps/usb/device/cdc_com_port_dual/inf” directory.
Once the device is successfully installed, open up two instances of a terminal program, such as HyperTerminal. Select the
appropriate COM port for each of these terminal instance.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-155
To run the demonstration, type a character or string in one terminal window. The same character or string appears on the
second terminal window. Similarly, any character typed on second window appears on the first window.
Note: Some terminal programs, like HyperTerminal, require users to click the disconnect button before removing the device from
the computer. Failing to do so may result in having to close and open the program again in order to reconnect to the device.
3.10.1.5.1.3 cdc_serial_emulator
This application demonstrates the use of the CDC device class in implementing a USB-to-Serial Dongle.
Description
This application demonstrates the use of the CDC device class in implementing a USB-to-Serial Dongle. The application
enumerates a COM port on the PC. Data received through the CDC USB interface is forwarded to a UART. Data received on the
UART is forwarded to the CDC USB interface. This emulates a USB-to-Serial Dongle.
3.10.1.5.1.3.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB PIC32MX795F512L Plug-In Module (PIM) 1
Any commercially available USB-to-Serial dongle -
Note 1: This board cannot be used by itself. It requires an Explorer 16 Development Board (DM240001) and a USB PICtail Plus
Daughter Board (AC164131) in order to operate.
3.10.1.5.1.3.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
Explorer 16 Development Board Based Demonstrations
For all of the Explorer 16-based demonstration boards, please follow the following instructions:
1. Connect the USB PICtail Plus Daughter Board to the Explorer 16 Development Board.
2. Short JP2 and JP3 on the USB PICtail Plus Daughter Board
3. Open JP1 and JP4 on the USB PICtail Plus Daughter Board
4. Make sure that S2 on the Explorer 16 Development Board is switched to the "PIM" setting.
5. Short JP2 on the Explorer 16 Development Board to enable the LEDs.
6. Follow any processor specific instructions below. All instructions apply to the PIM unless otherwise stated:
PIC32MX795F512L PIM
7. Open J10.
8. Short pins 1 (marked "USB") and pin 2 (center) of jumpers J1 and J2.
3.10.1.5.1.3.3 Running the Demonstration
Provides instructions on how to build and run the CDC Serial Emulator Demonstration. Please refer to Release Notes for
demonstration limitations, if any.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-156
Description
This application demonstrates the use of the CDC device class in implementing a USB to Serial Dongle. The application
enumerates a COM port on the PC. Data received through the CDC USB interface is forwarded to a UART. Data received on the
UART is forwarded to the CDC USB interface. This emulates a USB-to-Serial Dongle.
1. Open the project in MPLAB X IDE. Make sure that exp16_pic32mx795f512l_int_dyn configuration is selected.
2. Build the code and program the device.
3. Connect the USB PICtail Plus Daughter Board to the Explorer 16 Development Board.
4. Power up the Explorer 16 Development Board and connect a debugger/programmer of your choice to the Explorer 16
Development Board.
5. Build the code and program the device.
6. Connect the mini-B device connector on the USB PICtail Plus Daughter Board to the PC. If the host is a PC and this is the first
time you have plugged this device into the computer, you may be asked for a .inf file.
7. Select the “Install from a list or specific location (Advanced)” option. Point to the “/apps/usb/device/cdc_serial_emulator/inf” directory.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-157
When enumerated successfully, LED D5 will be the only LED illuminated on the Explorer 16 Development board.
8. Open a terminal emulation program of your choice and select the enumerated USB COM port.
9. Connect the USB-to-Serial Dongle to the same PC.
10. Open another instance of the terminal emulation program and select the USB-to-Serial Dongle.
11. Connect the serial connector of the USB-to-Serial Dongle to the UART connector (P1) on the Explorer 16 Development
Board.
12. Choose a baud rate of 9600, 1 stop bit and no parity while opening both of the terminal emulation programs.
The setup should be similar to the following diagram.
Any text entered into the terminal 1 program will be echoed on terminal 2 and vice versa.
3.10.1.5.1.4 hid_basic
This demonstration application creates a custom HID device that can be controlled by a PC based utility.
Description
This application creates a custom HID device that can be controlled by a PC based utility. The device allows the USB Host utility
to control the LEDs on the board and query the status of a switch.
3.10.1.5.1.4.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.10.1.5.1.4.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-158
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.10.1.5.1.4.3 Running the Demonstration
Provides instructions on how to build and run the HID Basic demonstration.
Description
This demonstration uses the selected hardware platform as a HID class USB device, but uses the HID class for general purpose
I/O operations. While compiling, select the pic32mx_usb_sk_xxx_xxx configurations for the PIC32 USB Starter Kit II or select the
pic32mz_sk_xxx_xxx configurations for PIC32MZ Embedded Connectivity (EC) Starter Kit. Typically, the HID class is used to
implement human interface products, such as mice and keyboards. The HID protocol is however quite flexible, and can be
adapted and used to send/receive general purpose data to/from a USB device. Using the HID class for general purpose I/O
operations is quite advantageous, in that it does not require any kind of custom driver installation process. HID class drivers are
already provided by and are distributed with common operating systems. Therefore, upon plugging in a HID class device into a
typical computer system, no user installation of drivers is required, the installation is fully automatic.
HID devices primarily communicate through one interrupt IN endpoint and one interrupt OUT endpoint. In most applications, this
effectively limits the maximum achievable bandwidth for full speed HID devices to 64 kBytes/s of IN traffic, and 64 kBytes/s of
OUT traffic (64 kB/s, but effectively “full duplex”).
The GenericHIDSimpleDemo.exe program, and the associated firmware demonstrate how to use the HID protocol for basic
general purpose USB data transfer.
Before you can run the GenericHIDSimpleDemo.exe executable, you will need to have the Microsoft® .NET Framework Version
2.0 Redistributable Package (later versions probably okay, but not tested) installed on your computer. Programs which were built
in the Visual Studio® .NET languages require the .NET redistributable package in order to run. The redistributable package can
be freely downloaded from Microsoft’s website. Users of Windows Vista® operating systems will not need to install the .NET
framework, as it comes pre-installed as part of the operating system.
To launch the application, simply double click on the executable “GenericHIDSimpleDemo.exe” in the “\apps\usb\device\hid_basic\bin” directory. A window like that shown below should appear:
If instead of this window, an error message pops up while trying to launch the application, it is likely the Microsoft .NET
Framework Version 2.0 Redistributable Package has not yet been installed. Please install it and try again.
In order to begin sending/receiving packets to the device, you must first find and “connect” to the device. As configured by
default, the application is looking for HID class USB devices with VID = 0x04D8 and PID = 0x003F. The device descriptor in the
firmware project meant to be used with this demonstration uses the same VID/PID. If you plug in a USB device programmed with
the correct pre-compiled .hex file, and hit the “Connect” button, the other push buttons should become enabled. If hitting the
connect button has no effect, it is likely the USB device is either not connected, or has not been programmed with the correct
firmware.
Hitting the Toggle LED(s) should send a single packet of general purpose generic data to the HID class USB peripheral device.
The data will arrive on the interrupt OUT endpoint. The firmware has been configured to receive this generic data packet, parse
the packet looking for the “Toggle LED(s)” command, and should respond appropriately by controlling the LED(s) on the
demonstration board.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-159
The “Get Pushbutton State” button will send one packet of data over the USB to the peripheral device (to the interrupt OUT
endpoint) requesting the current pushbutton state. The firmware will process the received Get Pushbutton State command, and
will prepare an appropriate response packet depending upon the pushbutton state.
Following table shows the button that has to be pressed on the demonstration board to see the push button state changing.
Demonstration Board Button
PIC32 USB Starter Kit II SW1
3.10.1.5.1.5 hid_mouse
Demonstrates a USB HID device, emulating a mouse pointing device.
Description
This demonstration application creates a USB HID based 2 button mouse device. When connected, the device emulates mouse
operation by moving the cursor in a circular pattern.
3.10.1.5.1.5.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.10.1.5.1.5.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.10.1.5.1.5.3 Running the Demonstration
Provides instructions on how to build and run the HID Mouse Demonstration.
Description
This demonstration uses the selected hardware platform as a USB mouse. While compiling, select the pic32mx_usb_sk_xxx_xxx
configurations for the PIC32 USB Starter Kit II or select the pic32mz_sk_xxx_xxx configurations for PIC32MZ Embedded
Connectivity (EC) Starter Kit. Before connecting the board to the computer through the USB cable please be aware that the
device will start moving the mouse cursor around on the computer. There are two ways to stop the device from making the
cursor to continue to move. The first way is to disconnect the device from the computer. The second is to press the correct
button on the hardware platform. Pressing the button again will cause the mouse cursor to start moving in a circle again.
Following table shows the button that has to be pressed on the demonstration board to stop the circular motion:
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-160
Demonstration Board Button
PIC32 USB Starter Kit II SW1
3.10.1.5.1.6 hid_keyboard
Demonstrates a USB HID device, emulating a keyboard.
Description
This demonstration application creates a Generic HID keyboard. Pressing a key on the board emulates a keyboard key press.
3.10.1.5.1.6.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.10.1.5.1.6.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.10.1.5.1.6.3 Running the Demonstration
Provides instructions on how to build and run the USB HID Keyboard demonstration.
Description
This demonstration uses the selected hardware platform as a USB keyboard. While compiling, select the
pic32mx_usb_sk_xxx_xxx configurations for the PIC32 USB Starter Kit II or select the pic32mz_sk_xxx_xxx configurations for
PIC32MZ Embedded Connectivity (EC) Starter Kit. Before pressing the button, select a window in which it is safe to type text
freely. Pressing the button on the demonstration board will cause the device to print a character on the screen.
Following table shows the button that has to be pressed on the demonstration board to print a character.
Demonstration Board Button
PIC32 USB Starter Kit II SW1
3.10.1.5.1.7 hid_joystick
Demonstrates a USB HID device emulating a joystick.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-161
Description
This demonstration application creates a custom HID joystick. This application is only intended to demonstrate creation of
Joystick HID Report descriptors and may not be a definite end solution. The end application requirements may need the report
descriptor to be modified.
3.10.1.5.1.7.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Starter Kit II -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
3.10.1.5.1.7.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Starter Kit II
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit
No hardware related configuration or jumper setting changes are necessary.
3.10.1.5.1.7.3 Running the Demonstration
Provides instructions on how to build and run the USB HID Josytick demonstration.
Description
This demonstration uses the selected hardware platform as a USB Joystick. While compiling, select the
pic32mx_usb_sk_xxx_xxx configurations for the PIC32 USB Starter Kit II or select the pic32mz_sk_xxx_xxx configurations for
PIC32MZ Embedded Connectivity (EC) Starter Kit. To test the joystick feature, go to the “\apps\usb\device\generic_device\bin” directory. A window like that shown below should appear:
If instead of this window, an error message pops up while trying to launch the application, it is likely the Microsoft .NET
Framework Version 3.5 Redistributable Package has not yet been installed. Please install it and try again.
In order to begin sending/receiving packets to the device, you must first find and “connect” to the device. As configured by
default, the application is looking for USB devices with VID = 0x04D8 and PID = 0x0204. The device descriptor in the firmware
project meant to be used with this demonstration uses the same VID/PID. To run the demonstration program the USB device
with the correct precompiled .hex file. If you are connecting the device for the first time, Windows pops up a window asking you
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-165
to install the driver for the device. When asked for the driver point it to the inf file provided along with the demonstration.
Windows takes while to install the driver for the USB device that is just plugged in. Open the Device manager and ensure that
the USB device is listed under the ‘Libusb Demo Devices’. Once the driver is installed hit the “Connect” button, the other
pushbuttons should become enabled. If hitting the connect button has no effect, it is likely the USB device is either not
connected, or has not been programmed with the correct firmware.
If a different VID/PID combination from the default is desired, then the descriptors in the firmware must be changed as well as
the inf file. The easiest way to change the inf file is to use the utility provided with the LibUSB download for windows on the
LibUSB website. This utility can create a new inf file based on a connected device. So make sure to change the VID/PID
combination first in the firmware, connect the device, and then run the inf file creator utility. After completing the utility, a new
signed driver with inf file is created.
Once the driver is installed hit the “Connect” button, the other pushbuttons should become enabled. If hitting the connect button
has no effect, it is likely the USB device is either not connected, or has not been programmed with the correct firmware.
Hitting the Toggle LED(s) should send a single packet of general purpose generic data to the Custom class USB peripheral
device. The data will arrive on the Bulk OUT endpoint. The firmware has been configured to receive this generic data packet,
parse the packet looking for the “Toggle LED(s)” command, and should respond appropriately by controlling the LED(s) on the
demonstration board.
The “Get Pushbutton State” button will send one packet of data over the USB to the peripheral device (to the Bulk OUT endpoint)
requesting the current pushbutton state. The firmware will process the received Get Pushbutton State command, and will
prepare an appropriate response packet depending upon the pushbutton state.
The PC then requests a packet of data from the device (which will be taken from the Bulk IN endpoint). Once the PC application
receives the response packet, it will update the pushbutton state label.
Try experimenting with the application by holding down the appropriate pushbutton on the demonstration board, and then
simultaneously clicking on the “Get Pushbutton State” button. Then try to repeat the process, but this time without holding down
the pushbutton on the demonstration board.
Following table shows the button that has to be pressed on the demonstration board to see the push button state changing.
Demonstration Board Button
PIC32 USB Starter Kit II SW1
3.10.1.5.1.10 audio_speaker
Demonstrates a USB Audio Device that emulates a USB speaker.
Description
This demonstration application creates uses the USB Audio Device class to implement a speaker.
3.10.1.5.1.10.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32 USB Digital Audio Accessory Board -
PIC32MZ Embedded Connectivity (EC) Starter Kit -
Multimedia Expansion Board II (MEB II) -
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-166
3.10.1.5.1.10.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32 USB Digital Audio Accessory Board
No hardware related configuration or jumper setting changes are necessary.
PIC32MZ Embedded Connectivity (EC) Starter Kit and Multimedia Expansion Board II (MEB II)
1) Fix the PIC32MZ Embedded Connectivity (EC) Starter Kit on the MEB II board.
2) Connect a Headphone to the HP OUT jack on the MEB II board.
3.10.1.5.1.10.3 Running the Demonstration
Provides instructions on how to build and run the Audio Speaker Demonstration.
Description
This demonstration functions as a speaker when plugged into a computer. Using any feature on the computer that normal
produces sound on the speaker will work with this demonstration. The feature unit only supports the Mute control.
Please note that some applications lock into a sound source when they open or close (such as some web browsers or plug-ins),
so that if you plug in the speaker with the web page or video already playing, the sound might not get redirected to the USB
based speakers until you close and reopen the browser.
The audio device created in this demonstration has the following characteristics:
• Sampling rate of 48 kHz
• 2 Channel (Stereo)
• PCM Format - 16 bits per Sample
• Asynchronous Audio Endpoint
3.10.1.5.2 Host
3.10.1.5.2.1 cdc_basic
This application demonstrates the use of the CDC Host Class Driver to enumerate and operate a CDC Device.
Description
This application demonstrates the use of the CDC Host Class Driver to enumerate and operate a CDC Device. The application
uses the USB Host layer and CDC class driver to enumerate a CDC USB device. The demonstration host application then
operates and uses the functionality of the attached CDC Device.
3.10.1.5.2.1.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-167
Description
Demonstration Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
PIC32 USB Starter Kit II -
Hardware required for USB Device CDC Serial Emulator Demonstration Application -
3.10.1.5.2.1.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32MZ Embedded Connectivity (EC) Starter Kit
This hardware does not require any configuration.
PIC32 Starter Kit USB II
This hardware does not require any configuration.
3.10.1.5.2.1.3 Running the Demonstration
Provides instructions on how to build and run the USB Host CDC Basic Demo. Please refer to the Release Notes for
demonstration limitations, if any.
Description
This application demonstrates the use of the CDC Host Class Driver to enumerate and operate a CDC Device. The application
uses the USB Host layer and CDC class driver to enumerate a CDC USB device. The demonstration host application then
operates and uses the functionality of the attached CDC Device.
1. Open the project in MPLAB X IDE and select the desired project configuration.
2. Build the code and program the device.
3. Follow the directions for setting up and running the cdc_serial_emulator USB device demonstration.
4. Connect the UART (P1) port on the Explorer 16 Development Board (running the cdc_serial_emulator demonstration) to a
USB Host PC via a commercially available Serial-to-USB Dongle.
5. Start a terminal program on the USB Host PC and select the Serial-to-USB Dongle as the communication port. Select the
baud rate as 9600, no parity, 1 stop bit and no flow control.
6. Connect the mini – B connector on the USB PICtail Plus Daughter Board , of the cdc_serial_emulator demonstration setup, to
the Type – A USB host connector on the starter kit.
7. A prompt (“LED : “) will be displayed immediately on the terminal emulation program.
8. Pressing either the 1, 2, or 3 key on the USB Host keyboard will cause LED 1, 2, or 3 on the PIC32 Starter kit (running the
USB CDC Host application) to switch on, respectively.
9. The prompt will again be displayed on terminal emulation program, and step 8 can be repeated.
The setup should be similar to the following diagram.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-168
The cdc_serial_emulator demonstration emulates a USB-to-Serial Dongle. The CDC Host (running the cdc_basic demonstration
application) sends the prompt message to the CDC device. The CDC device forwards the prompt to the UART port from where it
is transmitted to the PC USB Host through the USB-to-Serial Dongle. A key press on the PC USB Host is transmitted to the CDC
device, which in turn presents the key press data to the CDC host. The cdc_basic demonstration then analyzes the key press
data and switches on the respective LED.
3.10.1.5.2.2 msd_basic
This application demonstrates the use of the MSD Host Class Driver to write a file to USB Flash Drive.
Description
This application demonstrates the use of the MSD Host Class Driver to write a file to a USB Flash drive. The application uses the
USB Host layer , MSD class driver and the MPLAB Harmony File System Framework to enumerate a USB Flash drive and to
write a file to it.
3.10.1.5.2.2.1 Supported Demonstration Boards
Lists supported demonstration and development hardware boards.
Description
Demonstration Board (click link for board information) Notes
PIC32MZ Embedded Connectivity (EC) Starter Kit -
PIC32 USB Starter Kit II -
3.10.1.5.2.2.2 Configuring the Hardware
Describes how to configure the supported hardware.
Description
PIC32MZ Embedded Connectivity (EC) Starter Kit
This hardware does not require any configuration.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-169
PIC32 Starter Kit USB II
This hardware does not require any configuration.
3.10.1.5.2.2.3 Running the Demonstration
Provides instructions on how to build and run the USB Host MSD Basic demonstration. Please refer to theRelease Notes for
demonstration limitations, if any.
Description
This application demonstrates the use of the MSD Host Class Driver to write a file to USB Flash drive. The application uses the
USB Host layer, MSD class driver and the MPLAB Harmony File System Framework to enumerate a USB Flash drive and to
write a file to it.
1. Open the project in MPLAB X IDE and select the desired project configuration.
2. Build the code and program the device.
3. With the code running, attach a USB Flash drive to the Host connector on the starter kit.
4. The demonstration application will then create a file named “File.txt”. It will then write the text “Hello World” to this file, and
then close the file.
5. The demonstration will then move to Idle mode, which is indicated when LED 2 on the starter kit lights up.
6. The USB Flash drive can then be attached to a USB Host PC to verify the demonstration application operation.
7. Steps 3 through 6 can be repeated.
8. If the USB Flash drive already contains a file with the name “File.txt”, the demonstration application will append the text “Hello
World” to the end of the file name.
3.10.1.6 Demonstration Board Information
Information on Hardware used by the USB Library Demo Applications.
Description
The USB Library Demo Applications can be tried across on hardware boards. This section provide details on the different
hardware boards that are used by the demo applications.
3.10.1.6.1 PIC32 USB Starter Kit II
Provides details information on the PIC32 USB Starter II.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-170
Description
SW1 - Application switch. Tied to RD6.
SW2 - Application switch. Tied to RD7.
SW3 - Application switch. Tied to RD13.
LED1 - Application LED. Tied to RD0.
LED2 - Application LED. Tied to RD1.
LED3 - Application LED. Tied to RD2.
This board supports the following USB Device demonstrations:
• CDC Single COM port (cdc_com_port_single).
• CDC Dual COM port (cdc_com_port_dual)
• HID Basic (hid_basic)
• HID Mouse (hid_mouse)
• HID Keyboard (hid_keyboard)
• HID Joystick (hid_joystick)
• MSD Flash Drive (msd_basic)
• Generic USB Device (generic_device)
More Information
Microchip Part Number : DM320003-2
3.10.1.6.2 Explorer 16 Development Board
Provides information on the Explorer 16 Development Board
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-171
Description
S1 - Reset button (MCLR)
S2 - Processor switch. This switch determines which processor is running, the processor on the board or the processor on the
Plug-In-Module (PIM).
S3, S4, S5, S6 - Application switches. For information about what pin is connected to this switch, please refer to the information
for the PIM in use.
D3 through D10 - Application LEDs. For information about what pin is connected to this LED, please refer to the information for
the PIM in use.
This board support the following USB Host demos:
1. CDC Host (cdc_serial)
More Information:
Microchip Part Number: DM240001
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-172
3.10.1.6.3 PIC32MX795F512L Plug-In-Module (PIM)
Provides information on the PIC32MX795F512L Plug-In-Module (PIM).
Description
This PIM is required while using the Explorer 16 Development Board.
More Information
Microchip Part Number: MA320003
Information Sheet
3.10.1.6.4 PIC32 USB Digital Audio Accessory Board
Provides information on the PIC32 USB Digital Audio Accessory Board
Description
This board support the following USB Device demonstration:
Audio Speaker (audio_speaker)
More Information:
Microchip Part Number: DM320014
3.10.1.6.5 PIC32MZ Embedded Connectivity (EC) Starter Kit
Provides details information on the PIC32MZ Embedded Connectivity (EC) Starter Kit.
Description
Microchip Part Number: DM320006 (without Crypto) or DM320006-C (with Crypto)
The top assembly of the board includes these key features, as indicated in Figure 1:
1. PIC32MZ2048ECH144 32-bit microcontroller.
2. Green power indicator LED.
3. On-board crystal or oscillator for precision microcontroller clocking (12 MHz).
4. USB connectivity for on-board debugger communications.
5. Green debug indicator LED.
6. Three push button switches for user-defined inputs.
7. Three user-defined indicator LEDs.
8. USB Type A receptacle connectivity for PIC32 host-based applications.
9. HOST mode power jumper.
10. Daughter board connectors for flexible Ethernet PHY options.
11. 32 kHz oscillator for RTCC and Timer1 (optional).
12. External 2 GB SQI memory for expanded memory application.
13. Jumper for using or disconnecting the on-board debugger.
NOTE: When running self-powered USB device applications, open the jumper JP1 to prevent possibly back-feeding voltage onto
the Vbus from one port on the host to another (or from one host to another).
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-173
Figure 1: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Front)
The bottom assembly of the board includes these key features, as indicated in Figure 2:
1. PIC24FJ256GB106 USB microcontroller for on-board debugging.
2. Regulated +3.3V power supply for powering the starter kit via USB or expansion board.
3. Connector for various expansion boards.
4. USB Type micro-AB receptacle for OTG and USB device connectivity for PIC32 OTG/device-based applications.
5. 50 MHz Ethernet PHY oscillator.
6. USB Host and OTG power supply for powering PIC32 USB applications.
Figure 2: PIC32MZ Embedded Connectivity (EC) Starter Kit Layout (Back)
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-174
3.10.1.6.6 Multimedia Expansion Board II (MEB II)
Provides details information on the Multimedia Expansion Board II (MEB) II.
Description
Microchip Part Number: DM320005-2
Product Page
The front side of the MEB II includes these key features, as shown in Figure 1:
1. Display daughter board connector (60-pin Hirose board-to-board connector).
2. mTouch™ buttons.
3. Push Button.
4. Power LED.
5. User LEDs.
6. VGA Camera (OVM7690).
7. PICtail™ Connector.
8. Analog temperature sensor.
Figure 1: Multimedia Expansion Board II Layout (Front)
The underside of the MEB II includes these key features, as shown in Figure 2:
1. Regulated 5V and 3.3V power supply for powering the board via a 9-15V DC Adapter.
2. PIC32 Starter Kit connector (168-pin Hirose board-to-board connector).
3. 24-bit stereo audio codec (AK4953A).
4. Integrated 802.11bg wireless module (MRF24WG0MA).
5. Low-cost Bluetooth® HCI transceiver (BTM805).
6. EBI SRAM memory (IS61WV102416BLL).
7. microSD slot.
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-175
8. Analog accelerometer (ADXL325).
Figure 2: Multimedia Expansion Board II Layout (Back)
3.10 USB Demonstrations MPLAB Harmony Help USB Demonstrations
3-176
4 Building Projects Help
4 MPLAB Harmony Help
4-177
4.1 Building Projects
4.1.1 Introduction
This section describes the MPLAB X IDE projects that are provided to build binary (.a file) versions of key MPLAB Harmony
libraries.
Description
The following MPLAB Harmony libraries are provided in prebuilt binary (“.a” file) format because source code is not released or
to provide optimal performance for users of the free version of the compiler. The MPLAB X IDE projects used to build these
libraries are provided so that you can rebuild these libraries with different build parameters, optimization settings, and/or debug
symbols if desired.
Note: Building these libraries with high optimization settings will require a fully licensed version of the necessary Microchip XC
compiler.
Build Projects Folder: “/build”
Library Description
framework/crypto MPLAB Harmony Encryption/Decryption Library
framework/zlib MPLAB Harmony Compress/Decompression Library
framework/math/dsp MPLAB Harmony Digital Signal Processing Library
framework/math/libq MPLAB Harmony Fixed-point Math Library
framework/peripheral MPLAB Harmony Peripheral Library Build Project
4.1.2 Release Notes
MPLAB Harmony Version: v0.70b Building Projects: 0.70b Release Date: 18Nov2013
New This Release:
Peripheral Libraries
• Nothing to report in this release
Known Issues:
Peripheral Libraries
• Build configurations were not created for all PIC32 devices. As a workaround, select any configuration and choose a different
processor from the Project Properties dialog. This will require you to change the name of the output file to match the name of
the selected processor.
4.1 Building Projects MPLAB Harmony Help Using the Build Projects
4-178
4.1.3 Using the Build Projects
This section describes how to use the MPLAB Harmony build projects to generate binary (“.a” file) libraries that can be linked into
your project.
Description
The following information describes how to use the MPLAB Harmony build projects to generate binary (“.a” file) libraries that can
be linked into your project.
Prerequisites
To build MPLAB Harmony libraries, you must have the following installed on your development workstation:
• MPLAB X IDE (v1.95 or higher)
• MPLAB XC32 Compiler (v1.30 or higher)
• Appropriate compiler license for your desired optimization settings
Build Instructions
The following general instructions apply to all MPLAB Harmony library build projects. Refer to the related “Libraries” section for
additional information about building specific libraries.
1. Start MPLAB X IDE.
2. Open the desired build project.
3. Set it as the “main” project.
4.1 Building Projects MPLAB Harmony Help Using the Build Projects
4-179
4. Select the desired build configuration.
Note: Different libraries provide different build configurations, depending on the set of possible choices that are relevant to that
library. For example, the build project for the PIC32MX peripheral libraries (shown above) allows you to select the desired
PIC32MX processor. Other libraries may allow you to choose the desired optimization level or feature set. Refer to the related
“Libraries” section for information on the configurations provided by the build project for the library you want to build.
5. If required, select the desired processor (or other project settings, if desired).
Note: Projects that provide processor-specific configurations will not require this step.
a. Open the “Project Properties” dialog box.
b. Select the desired processor.
4.1 Building Projects MPLAB Harmony Help Using the Build Projects
4-180
6. Build the library.
7. Copy the binary “.a” library file to your project folder.
8. Add the binary “.a” library file to your project.
4.1.4 Supported Libraries
4.1.4.1 Crypto Library
This section describes MPLAB X IDE projects used to build the MPLAB Harmony Crypto libraries.
Description
The Crypto Library project is contained in the build/framework/crypto folder in the crypto.X project. The library contains functions
for operations on blocks of data.
Encryption/decryption operations can be done using AES, RSA, DES, Triple DES, and ECC.
Authentication/hashing can be done using MD5, SHA-1, SHA-256, SHA-384, and SHA-512.
Password-based key derivation can be done with HMAC.
Compression and decompression can be done using Huffman Encoding.
Random numbers can be created either one at a time or in a block.
4.1.4.2 Compression Library
This section describes MPLAB X IDE projects used to build the MPLAB Harmony compression/decompression “zlib” libraries.
Description
The “zlib” libraries consists of routines for handling gzip (.gz) files, include compression and decompression.
The library also contains functions that provide the Huffman compression available in the Crypto library.
4.1.4.3 DSP Math Library
This section describes MPLAB X IDE projects used to build the MPLAB Harmony DSP math libraries.
Description
The DSP Math Library consists of routines that are optimized in assembly to take advantage of the microAptivTM core of the
PIC32MZ devices. The library operates on fixed point integers, which are scaled to represent floating point numbers. Many
functions are available in both 16-bit and 32-bit numerical formats.
The library contains functions for mathematical operations on a vector (or array) of values, complex scalar values and matrixes.
4.1 Building Projects MPLAB Harmony Help Supported Libraries
4-181
Operations include add, subtract, multiply, power, data generation, and in the cases of vectors more complex functions including
statistics.
The DSP Math Library also contains a full set of digital filtering functions which include FIR and IIR primitives, as well as more
complex architectures (e.g., cascade and parallel bi-quad structures).
Finally the library contains a number of transform functions include FFT and inverse FFT, as well as a number of windowing
functions.
Some functions in the DSP Math Library require the use of the LIBQ Fixed Point Math library as well. In those cases the LIBQ
library must also be installed with your project. Details on dependent functions are found in the DSP Math Library help file under
the remarks section for that specific function.
4.1.4.4 Fixed-Point Math Library
This section describes MPLAB X IDE projects used to build the MPLAB Harmony fixed-point math “libq” libraries.
Description
The Fixed-Point Math Library consists of routines in optimized assembly for performing advanced mathematical operations on a
scalar. This is similar in construction to the floating point equivalent math.h file that is included with the compiler. All functions are
performed using fixed-point integer operations and generally available in both high precision and low precision variants. Lower
precision functions generally perform faster and may be suited for time critical operations.
4.1.4.5 Peripheral Libraries
This section describes MPLAB X IDE projects used to build the MPLAB Harmony peripheral libraries.
Description
The MPLAB Harmony peripheral libraries are implemented almost entirely using C-language inline functions. This is done for
efficiency so that the compiler can generate a few simple instructions in place of multiple layers of function calls when function
parameters are passed as constants. However, if the project that uses the peripheral library is built with low optimization settings,
the compiler may generate a function call instead of “inlining” the function implementation. Unfortunately, this will cause an
“undefined symbol” error at link time if the linker cannot find an actual implementation of the function to which it can link the “call”.
To satisfy the liker (and to provide optimized PLIB operation, even when low compiler optimization settings are used in your
project), the MPLAB Harmony peripheral libraries must be prebuilt as ‘.a’ file, linkable libraries. The appropriate MPLAB X IDE
peripheral library “.a” file for the processor in use must be added to the MPLAB X IDE project so that the linker can use them.
Note: Prebuilt binary “.a” files are provided for all supported processors in the MPLAB Harmony installation in the following
folder: /bin/framework/peripheral.
The MPLAB Harmony peripheral library “.a” file build projects are provided so that you may rebuild the binary peripheral library
“.a” files using any desired optimization settings. However, if you do this, you must have the appropriate xC compiler and you
must copy the resultant “.a” file to your project folder and add it to your MPLAB X IDE project. (See the “Build Instructions”
section for details of how to build the library.).
Build Configurations
Different MPLAB X IDE projects are provided for different processor families to build the peripheral libraries for MPLAB
Harmony. Each project provides a set of MPLAB X IDE configurations, one for each supported processor. For example, the
“mplab_pic32mx_plib.X” project provides configurations for each device in the PIC32MX family. To identify which devices are
supported, open the MPLAB X IDE project that is named after the device family in which you are interested, select the MPLAB X
IDE configuration named after the device you want to use, and look at the project properties to verify the device that is selected.
4.1 Building Projects MPLAB Harmony Help Supported Libraries
4-182
Key Configuration Options
To build the peripheral library binary “.a” files, there are two key configuration options that must be defined, as follows:
#define INLINE_API extern
#define INLINE static inline
These two configuration items are defined in the source file (“peripehral.c”), which then directly includes the peripheral library
implementation headers.
Note: This has already been done for you. This information is provided strictly for reference.
During normal peripheral library use, both of these options are defined as “extern inline” so that the compiler can choose
between generating a function call or generating inline code, directly in the calling function (as described above). However, to
build the binary library “.a” files the peripheral library Application Program Interface (API) functions must be exposed as global
“external” symbols. The “INLINE_API” attribute is placed as an attribute on all PLIB API function implementations. So, defining it
as “extern” allows the compiler to expose these functions within the library “.a” file so that the linker can find them. The VREG
and other “internal” functions prefixed by the “INLINE” attribute are then defined as “static inline” functions for efficiency.
4.1 Building Projects MPLAB Harmony Help Supported Libraries
4-183
5 Framework Help
5 MPLAB Harmony Help
5-184
5.1 Driver Library Help
5.1.1 Driver Library Overview
A device driver provides a simple well-defined interface to a hardware peripheral that can be used without operating system
support or that can be easily ported to a variety of operating systems. The basic driver operations allow an application to interact
with a device, reading and writing data, as if it was a simple file. More specific operations are present on most drivers and the
kind of specific operations available depends on the peripheral whose functionality is being exposed by the driver. A driver has
the following fundamental responsibilities:
1. Providing a highly-abstracted interface to a peripheral
2. Controlling access to a peripheral
3. Managing the state of a peripheral
The diagram below illustrates how a driver interacts with the other pieces of the system.
• The application calls the well defined driver interface to use the services provided by the driver.
• The driver calls various system services to perform the tasks that are possibly shared across other drivers.
• The driver also calls the peripheral library of the peripheral that its abstracting the interface to.
• Driver State machine can be invoked by the system task service (polling system) or the driver state machine can be invoked
from an ISR.
The driver provided the interfaces which can be broken down into the following two categories : ( is the abbreviation
identifying the module)
• System Operation - The interfaces for the system operation should be called by the system. Each driver can support all of
the system interfaces, or it can choose to not support the optional system interfaces. The system interfaces are
• DRV__Initialize - This routine initializes hardware for the index instance of the module, using the
hardware initialization given data. It also initializes any internal data structures. The DRV__Status operation will
return SYS_STATUS_READY when this operation has completed. Every driver module should define its own initialization
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-185
data structure type named “DRV__INIT”. This structure must be an extension of the SYS_MODULE_INIT structure
(i.e. its first member must be the SYS_MODULE_INIT structure or equivalent). Any parameter that can change the power
state of the module must be included in the data structure. Once the Initialize operation has been called, the Deinitialize
operation must be called before the Initialize operation can be called again.
• DRV__Reinitialize - This routine reinitializes and refreshes the hardware using the hardware initialization given
data. The DRV__Status operation will return SYS_STATUS_READY when this operation has completed. It does not
clear or reinitialize internal data structures (although it may change the value of a few appropriate data items necessary to
manage the new hardware state) and it does not disconnect or interrupt any ongoing client operations.This operation can
be used to change the power state of the peripheral the module manages.
• DRV__Deinitialize - This routine de-initializes the index instance of the module, disabling its operation
(and any hardware for driver modules).The DRV__Status operation will return SYS_STATUS_READY when this
operation has completed.
• DRV__Status - The Status operation can be used to determine when any of the other three module operations has
completed. If the Status operation returns SYS_STATUS_BUSY, the previous operation has not yet completed. Once the
Status operation returns “SYS_STATUS_READY”, any previous operations have completed.
• The value of SYS_STATUS_READY is 1. Values between 1 and 10 are reserved for system defined “ready” states. A
module may define module-specific “ready” or “run” states greater than or equal to 10
(SYS_STATUS_READY_EXTENDED).
• The value of SYS_STATUS_ERROR is -1. Values between -1 and -10 are reserved for system-defined errors. A module
may define module-specific error values of less than or equal to -10 (SYS_STATUS_ERROR_EXTENDED).
• If the Status operation returns an error value, the error may be cleared by calling the reinitialize operation. If that fails,
the deinitialize operation will need to be called, followed by the initialize operation to return to normal operations.
(Remember to check the value returned by the Status routine after calling any of the module operations to find out when
they have completed.)
• DRV__Tasks - Used to maintain the driver’s state machine and implement its ISR. It is normally only called by the
system’s tasks routine or by an Interrupt Service Routine (ISR).
The usage model of the system interfaces is demonstrated in the diagram below:
The system is also responsible for either calling the Tasks routine through an ISR or poll the Tasks routine in a polling
environment.
• Client Operation - The interfaces provided by the driver for client operation, can be called by the application. Each driver can
provide a set of client interfaces, which supports the operation model of the peripheral that the driver is supporting. The client
interfaces can include
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-186
• DRV__Open - This routine opens a driver for use by any client module and provides an “open-instance” handle that
must be provided to any of the other driver operations to identify the caller and the instance of the driver/hardware module.
• DRV__Close - This routine closes an opened-instance of a driver, invalidating the given handle. This routine is
optional, if the driver is designed to never be closed.
• DRV__ClientStatus - This routine provides the client, the status of the driver.
• DRV__ - This is the basic format of a driver interface routine. Driver interface routines (other than the
system module routines and the basic device driver routines) should follow this format.
The general usage model of the client interfaces is demonstrated in the diagram below, each driver will document usage model
specific to the driver in the driver help file.
Driver Configuration
A driver provides a set of configurations which can be divided into following categories:
1. Build Configuration Selection Configurations - The driver supports selecting the driver instance at build time (static
configuration) or at run time (dynamic configuration). A driver also supports selecting the number of clients that can possibly
connect to an hardware instance. All drivers will provide DRV__DRIVER_OBJECTS_NUMBER, when this
configuration macro is defined driver is built in dynamic driver configuration, else it is built in static driver configuration. The
number assigned to DRV__DRIVER_OBJECTS_NUMBER controls the maximum number of driver objects that can be
used. If a driver supports multiple clients it will provide DRV__CLIENT_OBJECTS_NUMBER, when this configuration
macro is defined driver is built to support multiple clients, else the driver is built to support single client. The number assigned
to DRV__DRIVER_OBJECTS_NUMBER controls the maximum number of client objects that can be used.
2. Initialization Overrides - Initialization overrides are provided to enable configuration of the hardware statically and with low
run time overhead. These override the parameters if also passed dynamically to Initialize or Reinitialize routine.
3. Other operational configurations - These can control the functionality of the driver or other setting of the driver that are
required for support core or optional functionality.
A driver allows the application to use the dynamic interface for all the above configuration when the application chooses the
appropriate configurations at build time. This is the preferred method of usage for the drivers.
As an exception, if the application wants to use multiple configurations in the same build for a driver type, or it needs to use
multiple instances of the same driver type, it needs to directly use the static single - client configuration interfaces, or it needs to
use the static multiple - client configuration interfaces.
While using the driver the static single client driver configuration, the application and system can choose to ignore the
SYS_MODULE_INDEX, SYS_MODULE_OBJ and DRV_HANDLE passed and returned to the driver and system interfaces.
While using the driver the static multiple client driver configuration, the application and system can choose to ignore the
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-187
SYS_MODULE_INDEX and SYS_MODULE_OBJ passed and returned to the driver and system interfaces.
5.1.1.1 Data Types
Enumerations
Name Description
DRV_CLIENT_STATUS Identifies the current status/state of a client's connection to a driver.
DRV_IO_BUFFER_TYPES Identifies to which buffer a device operation will apply.
DRV_IO_INTENT Identifies the intended usage of the device when it is opened.
Types
Name Description
DRV_HANDLE Handle to an opened device driver.
Description
5.1.1.1.1 DRV_CLIENT_STATUS Enumeration
C
typedef enum {
DRV_CLIENT_STATUS_ERROR_EXTENDED = -10,
DRV_CLIENT_STATUS_ERROR = -1,
DRV_CLIENT_STATUS_CLOSED = 0,
DRV_CLIENT_STATUS_BUSY = 1,
DRV_CLIENT_STATUS_READY = 2,
DRV_CLIENT_STATUS_READY_EXTENDED = 10
} DRV_CLIENT_STATUS;
Description
Driver Client Status
This enumeration identifies the current status/state of a client's link to a driver.
Members
Members Description
DRV_CLIENT_STATUS_ERROR_EXTENDED
= -10
Indicates that a non-system defined error has occurred.
DRV_CLIENT_STATUS_ERROR = -1 An un-specified error has occurred.
DRV_CLIENT_STATUS_CLOSED = 0 An operation is currently in progress
DRV_CLIENT_STATUS_BUSY = 1 An operation is currently in progress
DRV_CLIENT_STATUS_READY = 2 Any previous operations have succeeded and the module is ready for
additional operations
DRV_CLIENT_STATUS_READY_EXTENDED
= 10
Indicates that the module is in a non-system defined ready/run state.
Remarks
The enumeration used as the return type for the client-level status routines defined by each device driver or system module (for
example, DRV_USART_ClientStatus) must be based on the values in this enumeration.
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-188
5.1.1.1.2 DRV_HANDLE Type
C
typedef uintptr_t DRV_HANDLE;
Description
Device Handle
This handle identifies the open instance of a device driver. It must be passed to all other driver routines (except the initialization,
deinitialization, or power routines) to identify the caller.
Remarks
Every application or module that wants to use a driver must first call the driver's open routine. This is the only routine that is
absolutely required for every driver.
If a driver is unable to allow an additional module to use it, it must then return the special value DRV_HANDLE_INVALID. Callers
should check the handle returned for this value to ensure this value was not returned before attempting to call any other driver
routines using the handle.
5.1.1.1.3 DRV_IO_BUFFER_TYPES Enumeration
C
typedef enum {
DRV_IO_BUFFER_TYPE_NONE = 0x00,
DRV_IO_BUFFER_TYPE_READ = 0x01,
DRV_IO_BUFFER_TYPE_WRITE = 0x02,
DRV_IO_BUFFER_TYPE_RW = DRV_IO_BUFFER_TYPE_READ|DRV_IO_BUFFER_TYPE_WRITE
} DRV_IO_BUFFER_TYPES;
Description
Device Driver IO Buffer Identifier
This enumeration identifies to which buffer (read, write, both, or neither) a device operation will apply. This is used for "flush" (or
similar) operations.
Members
Members Description
DRV_IO_BUFFER_TYPE_NONE = 0x00 Operation does not apply to any buffer
DRV_IO_BUFFER_TYPE_READ = 0x01 Operation applies to read buffer
DRV_IO_BUFFER_TYPE_WRITE = 0x02 Operation applies to write buffer
DRV_IO_BUFFER_TYPE_RW =
DRV_IO_BUFFER_TYPE_READ|DRV_IO_BUFFER_TYPE_WRITE
Operation applies to both read and write buffers
5.1.1.1.4 DRV_IO_INTENT Enumeration
C
typedef enum {
DRV_IO_INTENT_READ,
DRV_IO_INTENT_WRITE,
DRV_IO_INTENT_READWRITE,
DRV_IO_INTENT_BLOCKING,
DRV_IO_INTENT_NONBLOCKING,
DRV_IO_INTENT_EXCLUSIVE,
DRV_IO_INTENT_SHARED
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-189
} DRV_IO_INTENT;
Description
Device Driver I/O Intent
This enumeration identifies the intended usage of the device when the caller opens the device. It identifies the desired behavior
of the device driver for the following:
• Blocking or non-blocking I/O behavior (do I/O calls such as read and write block until the operation is finished or do they return
immediately and require the caller to call another routine to check the status of the operation)
• Support reading and/or writing of data from/to the device
• Identify the buffering behavior (sometimes called "double buffering" of the driver. Indicates if the driver should maintain its own
read/write buffers and copy data to/from these buffers to/from the caller's buffers.
• Identify the DMA behavior of the peripheral
Members
Members Description
DRV_IO_INTENT_READ Read
DRV_IO_INTENT_WRITE Write
DRV_IO_INTENT_READWRITE Read and Write
DRV_IO_INTENT_BLOCKING The driver will block and will return when the operation is complete
DRV_IO_INTENT_NONBLOCKING The driver will return immediately
DRV_IO_INTENT_EXCLUSIVE The driver will support only one client at a time
DRV_IO_INTENT_SHARED The driver will support multiple clients at a time
Remarks
The buffer allocation method is not identified by this enumeration. Buffers can be allocated statically at build time, dynamically at
run-time, or even allocated by the caller and passed to the driver for its own usage if a driver-specific routine is provided for such.
This choice is left to the design of the individual driver and is considered part of its interface.
These values can be considered "flags". One selection from each of the groups below can be ORed together to create the
complete value passed to the driver's open routine.
5.1.1.2 Constants
Macros
Name Description
DRV_CONFIG_NOT_SUPPORTED Not supported configuration.
DRV_HANDLE_INVALID Invalid device handle.
DRV_IO_ISBLOCKING Returns if the I/O intent provided is blocking
DRV_IO_ISEXCLUSIVE Returns if the I/O intent provided is non-blocking.
DRV_IO_ISNONBLOCKING Returns if the I/O intent provided is non-blocking.
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-190
Description
5.1.1.2.1 DRV_CONFIG_NOT_SUPPORTED Macro
C
#define DRV_CONFIG_NOT_SUPPORTED (((unsigned short) -1))
Description
Not supported configuration
If the configuration option is not supported on an instance of the peripheral, use this macro to equate to that configuration. This
option should be listed as a possible value in the description of that configuration option.
5.1.1.2.2 DRV_HANDLE_INVALID Macro
C
#define DRV_HANDLE_INVALID (((DRV_HANDLE) -1))
Description
Invalid Device Handle
If a driver is unable to allow an additional module to use it, it must then return the special value DRV_HANDLE_INVALID. Callers
should check the handle returned for this value to ensure this value was not returned before attempting to call any other driver
routines using the handle.
Remarks
None.
5.1.1.2.3 DRV_IO_ISBLOCKING Macro
C
#define DRV_IO_ISBLOCKING(intent) (intent & DRV_IO_INTENT_BLOCKING)
Description
Device Driver Blocking Status Macro
This macro returns if the I/O intent provided is blocking.
Remarks
None.
5.1.1.2.4 DRV_IO_ISEXCLUSIVE Macro
C
#define DRV_IO_ISEXCLUSIVE(intent) (intent & DRV_IO_INTENT_EXCLUSIVE)
Description
Device Driver Exclusive Status Macro
This macro returns if the I/O intent provided is non-blocking.
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-191
Remarks
None.
5.1.1.2.5 DRV_IO_ISNONBLOCKING Macro
C
#define DRV_IO_ISNONBLOCKING(intent) (intent & DRV_IO_INTENT_NONBLOCKING )
Description
Device Driver Non Blocking Status Macro
This macro returns if the I/ intent provided is non-blocking.
Remarks
None.
5.1.1.3 Files
Files
Name Description
driver.h This file aggregates all of the driver library interface headers.
driver_common.h This file defines the common macros and definitions used by the driver definition
and implementation headers.
Description
5.1.1.3.1 driver.h
Driver Library Interface Header
This file aggregates all of the driver library interface headers so client code only needs to include this one single header to obtain
prototypes and definitions for the interfaces to all driver libraries.
A device driver provides a simple well-defined interface to a hardware peripheral that can be used without operating system
support or that can be easily ported to a variety of operating systems.
A driver has the fundamental responsibilities:
• Providing a highly-abstraced interface to a peripheral
• Controlling access to a peripheral
• Managing the state of a peripheral
Remarks
The directory in which this file resides should be added to the compiler's search path for header files.
File Name
drv.h
Company
Microchip Technology Inc.
5.1 Driver Library Help MPLAB Harmony Help Driver Library Overview
5-192
5.1.1.3.2 driver_common.h
Driver Common Header
This file defines the common macros and definitions used by the driver definition and the implementation header.
Remarks
The directory in which this file resides should be added to the compiler's search path for header files.
Enumerations
Name Description
DRV_CLIENT_STATUS Identifies the current status/state of a client's connection to a driver.
DRV_IO_BUFFER_TYPES Identifies to which buffer a device operation will apply.
DRV_IO_INTENT Identifies the intended usage of the device when it is opened.
Macros
Name Description
DRV_CONFIG_NOT_SUPPORTED Not supported configuration.
DRV_HANDLE_INVALID Invalid device handle.
DRV_IO_ISBLOCKING Returns if the I/O intent provided is blocking
DRV_IO_ISEXCLUSIVE Returns if the I/O intent provided is non-blocking.
DRV_IO_ISNONBLOCKING Returns if the I/O intent provided is non-blocking.
Types
Name Description
DRV_HANDLE Handle to an opened device driver.
File Name
drv_common.h
Company
Microchip Technology Inc.
5.1.2 ADC Driver Library
5.1.2.1 Introduction
ADC Driver for Microchip Microcontrollers
This Analog-to-Digital Converter (ADC) driver provides an interface to manage the ADC module on the Microchip family of
microcontrollers.
Description
Overview
An ADC is a vital part of any system that interfaces to real-world signals. While there are many techniques for analog-to-digital
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-193
conversion, the Microchip family of microcontrollers uses Successive Approximation as one of its primary techniques.
5.1.2.2 Release Notes
MPLAB Harmony Version: v0.70b ADC Driver Library Version : 0.02a Release Date: 18Nov2013
New This Release:
This is the first release of the library. The interface can change in the beta and\or 1.0 release.
Known Issues:
Nothing to report in this release.
5.1.2.3 SW License Agreement
© 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED “AS IS.” MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
5.1.2.4 Using the Library
This topic describes the basic architecture of the ADC Driver Library and provides information and examples on how to use it.
Interface Header File: drv_adc.h
The interface to the ADC Driver Library is defined in the "drv_adc.h" header file.
Please refer to the MPLAB Harmony Overview for how the driver interacts with the framework.
5.1.2.4.1 Library Overview
Refer to the section Driver Overview for how the driver operates in a system.
The following table lists the interface section and its brief description.
Section Description
Configuring the Library Provides macros for configuring the system. It is required that the system
configures the driver to build correctly by choosing appropriate configuration
options as listed in this section.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-194
System Interaction Functions Provides system module interfaces, Device initialization, deinitialization,
reinitialization and status functions.
Client Core Configuration Functions Provides interfaces for core functionality of the driver.
5.1.2.4.2 Abstraction Model
The ADC driver is modeled using the abstraction model, as shown in the following diagram.
• DRV_ADC_InputsRegister allows selection of inputs
• DRV_ADC_SamplesRead and DRV_ADC_SamplesReadLatest allow reading of the sample from the result buffer
• DRV_ADC_Start and DRV_ADC_Stop will control the operation of the ADC
5.1.2.4.3 How the Library Works
The library provides interfaces to support:
• System Interaction
• Client Core Functionality
5.1.2.4.3.1 System Initialization
This section describes the system initialization and reinitialization settings for the ADC Peripheral Library.
Description
System Initialization and Reinitialization
The system initialization and the reinitialization settings, effect only the instance of the peripheral that is being initialized or
re-initialized. During system initialization configure each instance of the module with the following configuration settings that are
supported by the specific ADC device hardware (refer to DRV_ADC_INIT)
1. Device requested power state: One of the system module power states.
2. Acquisition time: If the hardware supports this feature, configure this variable from DRV_ADC_ACQUISITION_TIME.
3. Voltage reference: If the hardware supports this feature, select the one from the available options(from
DRV_ADC_VOLTAGE_REFERENCE).
4. Conversion clock: If the hardware supports this feature, select the conversion clock prescaler value (from
DRV_ADC_CONVERSION_CLOCK_PRESCALER).
5. Conversion clock source: If the hardware supports this feature, select the conversion clock prescaler value (from
DRV_ADC_CONVERSION_CLOCK_SOURCE).
6. Clock frequency: Peripheral clock frequency configured for the device.
7. Conversion trigger source: If the hardware supports this feature, select the conversion trigger source(from
DRV_ADC_CONVERSION_TRIGGER_SOURCE).
8. Samples per interrupt: Configure the number of samples before to be generating interrupt(from
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-195
DRV_ADC_SAMPLES_PER_INTERRUPT).
9. Output data format: Select the output data format.
10. Interrupt source: Select the interrupt source.
Example: Auto Sampling Mode
#define MY_ADC_INSTANCE DRV_ADC_INDEX_0
SYS_MODULE_OBJ myAdcObj;
DRV_ADC_INIT adcInitData;
SYS_STATUS adcStatus;
// Populate the adcInitData structure
adcInitData.plibModuleId = ADC_ID_1;
adcInitData.acquisitionTime = PLIB_ADC_ACQUISITION_TIME_20_TAD;
adcInitData.voltageReference = PLIB_ADC_VREF_POS_TO_VDD_VREF_NEG_TO_VSS;
adcInitData.clockFrequency = 4000000; //4MHz
adcInitData.conversionClock = PLIB_ADC_CONV_CLOCK_20_TCY;
adcInitData.conversionClockSource = PLIB_ADC_CLOCK_SRC_SYSTEM_CLOCK;
adcInitData.conversionTriggerSource = PLIB_ADC_CONVERSION_TRIGGER_INTERNAL_COUNT;
adcInitData.dataOutputFormat = PLIB_ADC_OUTPUT_FORMAT_INTEGER_16BIT;
adcInitData.initFlags = DRV_ADC_AUTO_SAMPLING;
adcInitData.interruptSource= PLIB_INT_SOURCE_ADC_1;
adcInitData.samplesPerInterrupt = PLIB_ADC_SAMPLE_PER_INTERRUPT_AT_EACH_SAMPLE;
myAdcObj = DRV_ADC_Initialize(MY_ADC_INSTANCE, (SYS_MODULE_INIT*)&adcInitData);
adcStatus = DRV_ADC_Status(myAdcObj);
if (SYS_STATUS_BUSY == adcStatus)
{
// do something else and check back later
}
else if (SYS_STATUS_ERROR >= adcStatus)
{
// Handle error
}
5.1.2.4.3.2 Client Core Functionality
Core functionality provides a basic interface for the driver operation.
Description
General Client Operation
Core functionality provides a basic interface for the driver operation.
Applications using the timer core functionality, need to perform the following:
1. The system should have completed necessary initialization and DRV_ADC_Tasks should either be running in a polled
environment, or in an interrupt environment.
2. Open the driver using DRV_ADC_Open (the timer driver supports exclusive access only).
3. Registers the inputs to be used by the clients using DRV_ADC_InputsRegister.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-196
4. Start the driver using DRV_ADC_Start.
5. Poll for the elapse status using DRV_ADC_SamplesAvailable, and then read the samples using either
DRV_ADC_SamplesReadLatest or DRV_ADC_SamplesRead.
6. The client will be able to stop the started ADC instance using DRV_ADC_Stop at any point and will be able to close it using
DRV_ADC_Close when it is no longer required.
Example:
DRV_HANDLE adcHandle; //Handle returned by DRV_ADC_Open function.
uint16_t dataBuffer; //Buffer to which the data will be written.
/*
Open a new client. The handle returned by the this function should be used
a passing parameter for all the specific client related operations.
*/
adcHandle = DRV_ADC_Open(MY_ADC_INSTANCE, DRV_IO_INTENT_NONBLOCKING);
DRV_ADC_InputsRegister ( adcHandle ,PLIB_ADC_INPUT_AN1|PLIB_ADC_INPUT_AN2 );
/*
ADC is not yet enabled. Enable it once the inputset is registered. Starts automatically
since auto sample mode is enabled.
*/
DRV_ADC_Start(adcHandle);
if ( DRV_ADC_SamplesAvailable(adcHandle) )
{
DRV_ADC_SamplesReadLatest ( adcHandle, &dataBuffer, 1);
/*
Once the above function returns success, the data is
in 'dataBuffer'. Application can use this data.
*/
}
5.1.2.4.3.3 Code Examples
Example1
//PIC32/PIC24 in auto sampling , Polling mode
#define MY_ADC_INSTANCE DRV_ADC_INDEX_0
DRV_HANDLE adcHandle; //Handle returned by DRV_ADC_Open function.
uint16_t dataBuffer; //Buffer to which the data will be written.
/*
Open a new client. The handle returned by the this function should be used
a passing parameter for all the specific client related operations.
*/
adcHandle = DRV_ADC_Open(MY_ADC_INSTANCE, DRV_IO_INTENT_NONBLOCKING);
ipHandle = DRV_ADC_InputsRegister ( adcHandle ,inputSetConfig );
/*
ADC is not yet enabled. Enable it once the inputset is registered. Starts automatically
since auto sample mode is enabled.
*/
DRV_ADC_Start(adcHandle);
while (DRV_ADC_SampleAvailable(adcHandle))
{
DRV_ADC_InputSetRead ( adcHandle, &dataBuffer, 1);
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-197
/*
Once the above function returns success, the data is
in 'dataBuffer'. Application can use this data.
*/
}
Example 2:
//PIC32/PIC24 in Manual triggering , Polling mode
#define MY_ADC_INSTANCE DRV_ADC_INDEX_0
int main()
{
SYS_MODULE_OBJ myAdcObj; //Object returned by DRV_ADC_Initialize function.
DRV_ADC_INIT adcInitData; //Contains all the initialization values.
DRV_HANDLE adcHandle; //Handle returned by DRV_ADC_Open function.
DRV_ADC_INPUTSET_HANDLE ipHandle; //Handle returned by DRV_ADC_InputSetRegister
function.
DRV_ADC_INPUTSET_CONFIG inputSetConfig;//Contains all values to configure the inputset.
uint16_t dataBuffer; //Buffer to which the data will be written.
/*
These initialization values should be based on the requirement of the
application and the way it wants the hardware to be operating. Most of
these values will be written directly to the hardware registers.
*/
adcInitData.plibModuleId = ADC_ID_1;
adcInitData.acquisitionTime = PLIB_ADC_ACQUISITION_TIME_15_TAD;
adcInitData.voltageReference = PLIB_ADC_VREF_POS_TO_VDD_VREF_NEG_TO_VSS;
adcInitData.clockFrequency = 4000000; //4MHz
adcInitData.conversionClock = PLIB_ADC_CONV_CLOCK_5_TCY;
adcInitData.conversionClockSource = PLIB_ADC_CLOCK_SRC_INTERNAL_RC;
adcInitData.conversionTriggerSource = PLIB_ADC_CONVERSION_TRIGGER_INTERNAL_COUNT;
adcInitData.dataOutputFormat = PLIB_ADC_OUTPUT_FORMAT_INTEGER_16BIT;
adcInitData.interruptSource= PLIB_INT_SOURCE_ADC_1;
adcInitData.samplesPerInterrupt = PLIB_ADC_SAMPLE_PER_INTERRUPT_AT_EACH_SAMPLE;
myAdcObj = DRV_ADC_Initialize(MY_ADC_INSTANCE, (SYS_MODULE_INIT*)&adcInitData);
/*
Open a new client. The handle returned by the this function should be used
a passing parameter for all the specific client related operations.
*/
adcHandle = DRV_ADC_Open(MY_ADC_INSTANCE, DRV_IO_INTENT_NONBLOCKING);
/*
Driver invokes the registered callback function every successful data read.
Application can perform an action or do a state change in the callback
*/
inputSetConfig.callback = adcCallback;
inputSetConfig.input = POTENTIOMETER_ANALOG_INPUT;
inputSetConfig.errorTolerance = 10;
inputSetConfig.samplingFrequency = 40000;
ipHandle = DRV_ADC_InputSetRegister ( adcHandle ,inputSetConfig );
/*
ADC is not yet enabled. Enable it once the inputset is registered. Starts automatically
since auto sample mode is enabled.
*/
DRV_ADC_Start(adcHandle);
while (1)
{
/*
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-198
This function can be either called in a sequential way or it could
be called from a timer periodically
*/
triggerAdc();
DRV_HANDLE handle;
DRV_ADC_Tasks (myAdcObj);
DRV_ADC_InputSetRead ( adcHandle, &dataBuffer, 1);
/*
Once the above function returns success, the data is
in 'dataBuffer'. Application can use this data.
*/
}
}
void adcCallback (void)
{
// Application can do something here
}
void triggerAdc(void)
{
DRV_ADC_OperationSetup(handle, DRV_ADC_START_SAMPLING);
/* Give some delay between the two operations. */
for (i=0; i<100; i++);
DRV_ADC_OperationSetup(handle, DRV_ADC_START_CONVERSION);
}
Example 3:
//PIC32/PIC24 in auto sampling , Interrupt mode
#define MY_ADC_INSTANCE DRV_ADC_INDEX_0
int main()
{
SYS_MODULE_OBJ myAdcObj; //Object returned by DRV_ADC_Initialize function.
DRV_ADC_INIT adcInitData; //Contains all the initialization values.
DRV_HANDLE adcHandle; //Handle returned by DRV_ADC_Open function.
DRV_ADC_INPUTSET_HANDLE ipHandle; //Handle returned by DRV_ADC_InputSetRegister
function.
DRV_ADC_INPUTSET_CONFIG inputSetConfig;//Contains all values to configure the inputset.
uint16_t dataBuffer; //Buffer to which the data will be written.
/*
These initialization values should be based on the requirement of the
application and the way it wants the hardware to be operating. Most of
these values will be written directly to the hardware registers.
*/
adcInitData.plibModuleId = ADC_ID_1;
adcInitData.acquisitionTime = PLIB_ADC_ACQUISITION_TIME_15_TAD;
adcInitData.voltageReference = PLIB_ADC_VREF_POS_TO_VDD_VREF_NEG_TO_VSS;
adcInitData.clockFrequency = 4000000; //4MHz
adcInitData.conversionClock = PLIB_ADC_CONV_CLOCK_5_TCY;
adcInitData.conversionClockSource = PLIB_ADC_CLOCK_SRC_INTERNAL_RC;
adcInitData.conversionTriggerSource = PLIB_ADC_CONVERSION_TRIGGER_INTERNAL_COUNT;
adcInitData.dataOutputFormat = PLIB_ADC_OUTPUT_FORMAT_INTEGER_16BIT;
adcInitData.initFlags = DRV_ADC_AUTO_SAMPLING;
adcInitData.interruptSource= PLIB_INT_SOURCE_ADC_1;
adcInitData.samplesPerInterrupt = PLIB_ADC_SAMPLE_PER_INTERRUPT_AT_EACH_SAMPLE;
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-199
myAdcObj = DRV_ADC_Initialize(MY_ADC_INSTANCE, (SYS_MODULE_INIT*)&adcInitData);
/*
Open a new client. The handle returned by the this function should be used
a passing parameter for all the specific client related operations.
*/
adcHandle = DRV_ADC_Open(MY_ADC_INSTANCE, DRV_IO_INTENT_NONBLOCKING);
/*
Driver invokes the registered callback function every successful data read.
Application can perform an action or do a state change in the callback
*/
inputSetConfig.callback = adcCallback;
inputSetConfig.input = POTENTIOMETER_ANALOG_INPUT;
inputSetConfig.errorTolerance = 10;
inputSetConfig.samplingFrequency = 40000;
ipHandle = DRV_ADC_InputSetRegister ( adcHandle ,inputSetConfig );
/*
ADC is not yet enabled. Enable it once the inputset is registered. Starts automatically
since auto sample mode is enabled.
*/
DRV_ADC_Start(adcHandle);
while (1)
{
/*
Task function need not be called. Task function
is registered as ISR in case of interrpt mode
*/
DRV_ADC_InputSetRead ( adcHandle, &dataBuffer, 1);
/*
Once the above function returns success, the data is
in 'dataBuffer'. Application can use this data.
*/
}
}
void adcCallback (void)
{
// Application can do something here
}
// Do something else...
} while(total < MY_BUFFER_SIZE);
Example 4:
//PIC32/PIC24 in Manual triggering , Interrupt mode
#define MY_ADC_INSTANCE DRV_ADC_INDEX_0
int main()
{
SYS_MODULE_OBJ myAdcObj; //Object returned by DRV_ADC_Initialize function.
DRV_ADC_INIT adcInitData; //Contains all the initialization values.
DRV_HANDLE adcHandle; //Handle returned by DRV_ADC_Open function.
DRV_ADC_INPUTSET_HANDLE ipHandle; //Handle returned by DRV_ADC_InputSetRegister
function.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-200
DRV_ADC_INPUTSET_CONFIG inputSetConfig;//Contains all values to configure the inputset.
uint16_t dataBuffer; //Buffer to which the data will be written.
/*
These initialization values should be based on the requirement of the
application and the way it wants the hardware to be operating. Most of
these values will be written directly to the hardware registers.
*/
adcInitData.plibModuleId = ADC_ID_1;
adcInitData.acquisitionTime = PLIB_ADC_ACQUISITION_TIME_15_TAD;
adcInitData.voltageReference = PLIB_ADC_VREF_POS_TO_VDD_VREF_NEG_TO_VSS;
adcInitData.clockFrequency = 4000000; //4MHz
adcInitData.conversionClock = PLIB_ADC_CONV_CLOCK_5_TCY;
adcInitData.conversionClockSource = PLIB_ADC_CLOCK_SRC_INTERNAL_RC;
adcInitData.conversionTriggerSource = PLIB_ADC_CONVERSION_TRIGGER_INTERNAL_COUNT;
adcInitData.dataOutputFormat = PLIB_ADC_OUTPUT_FORMAT_INTEGER_16BIT;
adcInitData.interruptSource= PLIB_INT_SOURCE_ADC_1;
adcInitData.samplesPerInterrupt = PLIB_ADC_SAMPLE_PER_INTERRUPT_AT_EACH_SAMPLE;
myAdcObj = DRV_ADC_Initialize(MY_ADC_INSTANCE, (SYS_MODULE_INIT*)&adcInitData);
/*
Open a new client. The handle returned by the this function should be used
a passing parameter for all the specific client related operations.
*/
adcHandle = DRV_ADC_Open(MY_ADC_INSTANCE, DRV_IO_INTENT_NONBLOCKING);
/*
Driver invokes the registered callback function every successful data read.
Application can perform an action or do a state change in the callback
*/
inputSetConfig.callback = adcCallback;
inputSetConfig.input = POTENTIOMETER_ANALOG_INPUT;
inputSetConfig.errorTolerance = 10;
inputSetConfig.samplingFrequency = 40000;
ipHandle = DRV_ADC_InputSetRegister ( adcHandle ,inputSetConfig );
/*
ADC is not yet enabled. Enable it once the inputset is registered. Starts automatically
since auto sample mode is enabled.
*/
DRV_ADC_Start(adcHandle);
while (1)
{
/*
This function can be either called in a sequential way or it could
be called from a timer periodically
*/
triggerAdc();
/*
Task function need not be called. Task function
is registered as ISR in case of interrpt mode
*/
DRV_ADC_InputSetRead ( adcHandle, &dataBuffer, 1);
/*
Once the above function returns success, the data is
in 'dataBuffer'. Application can use this data.
*/
}
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-201
}
void adcCallback (void)
{
// Application can do something here
}
void triggerAdc(void)
{
DRV_ADC_OperationSetup(handle, DRV_ADC_START_SAMPLING);
/* Give some delay between the two operations. */
for (i=0; i<100; i++);
DRV_ADC_OperationSetup(handle, DRV_ADC_START_CONVERSION);
}
5.1.2.5 Configuring the Library
The configuration of the ADC device driver is based on the file sys_config.h
This header file contains the configuration selection for the ADC device driver build. Based on the selections made here and the
system setup the ADC device driver will support or not selected features. These configuration settings will apply to all instances
of the device driver.
This header can be placed anywhere in the application specific folders and the path of this header needs to be presented to the
include search for a successful build. Refer to the Applications Overview section for more details.
5.1.2.6 Building the Library
Files
Name Description
drv_adc.c ADC Driver source file.
drv_adc_client_multi.c ADC Driver multiple client implementations.
drv_adc_client_single.c ADC Driver single client implementations.
drv_adc_hw_dynamic.c ADC Driver build variant implementation for the dynamic driver.
drv_adc_hw_static.c ADC Driver build variant implementation for the static driver.
Description
5.1.2.6.1 drv_adc.c
ADC Driver Source File
This file implements the ADC Driver Interface routines. While building the driver from source, ALWAYS use this file in the build.
File Name
drv_adc.c
Company
Microchip Technology Inc.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-202
5.1.2.6.2 drv_adc_client_multi.c
ADC Driver Multiple Client
This file implements the functions for the multiple client support. While building the driver from source, use this file in the build
when DRV_ADC_CLIENTS_NUMBER is defined in the system configuration or when DRV_ADC_INSTANCES_NUMBER is
defined in the system configuration.
File Name
drv_adc_client_multi.c
Company
Microchip Technology Inc.
5.1.2.6.3 drv_adc_client_single.c
ADC Driver Single Client
This file implements the functions for the single client support While building the driver from source, use this file in the build when
DRV_ADC_CLIENTS_NUMBER is not defined in system configuration.
File Name
drv_adc_client_single.c
Company
Microchip Technology Inc.
5.1.2.6.4 drv_adc_hw_dynamic.c
ADC Driver Build Variant implementation for dynamic driver
This file defines the build variant implementations for the dynamic driver. While building the driver from source, use this file in the
build when DRV_ADC_INSTANCES_NUMBER is defined in the system configuration.
File Name
drv_adc_hw_dynamic.c
Company
Microchip Technology Inc.
5.1.2.6.5 drv_adc_hw_static.c
ADC Driver build variant implementation for static driver
This file defines the build variant implementations for the static driver. While building the driver from source, use this file in the
build when DRV_ADC_INSTANCES_NUMBER is not defined in the system configuration.
File Name
drv_adc_hw_static.c
Company
Microchip Technology Inc.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-203
5.1.2.7 Library Interface
Data Types and Constants
Name Description
DRV_ADC_CLIENT_STATUS Defines the client-specific status of the ADC driver.
DRV_ADC_INIT Defines the data required to initialize or reinitialize the
ADC driver.
DRV_ADC_INIT_FLAGS Identifies the initialization flags of the ADC module.
DRV_ADC_ACQUISITION_TIME Defines the acquisition time.
DRV_ADC_ALTERNATE_INPUT_SAMPLING_ENABLE Enable the alternate input sampling feature of the ADC.
DRV_ADC_ANALOG_INPUT Defines the analog input channel.
DRV_ADC_AUTO_SAMPLING_ENABLE Rnable the suto-sampling feature of the ADC.
DRV_ADC_CLIENTS_NUMBER Selects the miximum number of clients.
DRV_ADC_CONVERSION_CLOCK_PRESCALER Defines the conversion clock.
DRV_ADC_CONVERSION_CLOCK_SOURCE Defines the conversion clock source.
DRV_ADC_CONVERSION_TRIGGER_SOURCE Defines the conversion trigger source.
DRV_ADC_INDEX ADC static index selection.
DRV_ADC_INDEX_0 ADC driver index definitions.
DRV_ADC_INDEX_1 This is macro DRV_ADC_INDEX_1.
DRV_ADC_INDEX_2 This is macro DRV_ADC_INDEX_2.
DRV_ADC_INDEX_COUNT Number of valid ADC driver indices.
DRV_ADC_INSTANCES_NUMBER Sets up the maximum number of hardware instances that
can be supported.
DRV_ADC_INTERNAL_BUFFER_SIZE Define the internal buffer size.
DRV_ADC_INTERRUPT_MODE Controls operation of the driver in the interrupt or polled
mode.
DRV_ADC_INTERRUPT_SOURCE Defines the interrupt source of the static driver.
DRV_ADC_PERIPHERAL_ID ADC PLIB ID Selection
DRV_ADC_POWER_STATE Controls the power state of the ADC.
DRV_ADC_RESULT_FORMAT Defines the data output format.
DRV_ADC_SAMPLES_PER_INTERRUPT Define the sample per interrupt.
DRV_ADC_STOP_ON_CONVERSION_ENABLE Enable the stop on conversion feature of the ADC.
DRV_ADC_VOLTAGE_REFERENCE Defines the voltage reference.
Client Core Configuration Functions
Name Description
DRV_ADC_ClientStatus Gets the current client-specific status the ADC driver.
DRV_ADC_Close Closes an opened-instance of the ADC driver.
DRV_ADC_InputsRegister Registers an input set with the driver for sampling.
DRV_ADC_Open Opens the specified ADC driver instance and returns a handle to it.
DRV_ADC_SamplesAvailable Identifies if any the ADC driver has any samples available to read.
DRV_ADC_Start Starts the ADC driver sampling and converting analog to digital values.
DRV_ADC_Stop Stops the ADC driver from sampling and converting analog to digital values.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-204
Other Functions
Name Description
DRV_ADC_SampleMaxGet Gets the max sample value.
DRV_ADC_SampleMinGet Gets the min sample value.
DRV_ADC_SamplesRead Reads the converted sample data from the ADC driver.
DRV_ADC_SamplesReadLatest Reads the most recently converted sample data from the ADC driver.
System Interaction Functions
Name Description
DRV_ADC_Deinitialize Deinitializes the specified instance of the ADC driver module.
DRV_ADC_Initialize Initializes the ADC driver.
DRV_ADC_Reinitialize Reinitializes the ADC instance for the specified module ID.
DRV_ADC_Status Provides the current status of the ADC driver module.
DRV_ADC_Tasks Maintains the driver's state machine and implements its ISR.
Description
5.1.2.7.1 System Interaction Functions
5.1.2.7.1.1 DRV_ADC_Deinitialize Function
C
void DRV_ADC_Deinitialize(
SYS_MODULE_OBJ object
);
Description
This function deinitializes the specified instance of the ADC driver module, disabling its operation (and any hardware).
Invalidates all the internal data.
Preconditions
The DRV_ADC_Initialize function should have been called before calling this function.
Parameters
Parameters Description
object Driver object handle, returned from DRV_ADC_Initialize
Returns
None.
Remarks
Once the Initialize operation has been called, the Deinitialize operation must be called before the Initialize operation can be
called again.
This function will NEVER block waiting for hardware. If the operation requires time to allow the hardware to complete, this will be
reported by the DRV_ADC_Status operation. The system has to use DRV_ADC_Status to find out when the module is in the
ready state.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-205
Example
SYS_MODULE_OBJ object; // Returned from DRV_ADC_Initialize
SYS_STATUS status;
DRV_ADC_Deinitialize(object);
status = DRV_ADC_Status(object);
if (SYS_MODULE_DEINITIALIZED == status)
{
// Check again later if you need to know
// when the driver is deinitialized.
}
5.1.2.7.1.2 DRV_ADC_Initialize Function
C
SYS_MODULE_OBJ DRV_ADC_Initialize(
const SYS_MODULE_INDEX drvIndex,
const SYS_MODULE_INIT * const init
);
Description
This function initializes the ADC driver, making it ready for clients to open and use it.
Preconditions
None.
Parameters
Parameters Description
drvIndex Index for the driver instance to be initialized
init Pointer to a data structure containing any data necessary to initialize the driver.
This pointer may be null if no data is required because static overrides have been
provided.
Returns
If successful, returns a valid handle to a driver instance object. Otherwise, it returns SYS_MODULE_OBJ_INVALID.
Remarks
This function must be called before any other ADC function is called.
This function should only be called once during system initialization unless DRV_ADC_Deinitialize is called to deinitialize the
driver instance.
This function will NEVER block for hardware access. If the operation requires time to allow the hardware to re-initialize, it will be
reported by the DRV_ADC_Status operation. The system must use DRV_ADC_Status to find out when the driver is in the ready
state.
Build configuration options may be used to staticaly override options in the "init" sructure and will take precedance over
initialization data passed using this function.
Example
DRV_ADC_INIT init;
SYS_MODULE_OBJ objectHandle;
// Populate the init structure
init.moduleInit.value = SYS_MODULE_POWER_RUN_FULL;
init.adcID = ADC_ID_1;
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-206
init.initFlags = DRV_ADC_AUTO_SAMPLING;
init.clockFrequency = 4000000; // 4MHz
init.acquisitionTime = ADC_ACQUISITION_TIME_15_TAD;
init.voltageReference = ADC_VREF_POS_TO_VDD_VREF_NEG_TO_VSS;
init.conversionClockPrescaler = ADC_CONV_CLOCK_5_TCY;
init.conversionClockSource = ADC_CLOCK_SRC_INTERNAL_RC;
init.conversionTriggerSource = ADC_CONVERSION_TRIGGER_INTERNAL_COUNT;
init.samplesPerInterrupt = ADC_SAMPLE_PER_INTERRUPT_AT_EACH_SAMPLE;
init.resultFormat = ADC_RESULT_FORMAT_INTEGER_16BIT;
init.analogInput = ADC_INPUT_AN2
init.interruptSource = INT_SOURCE_ADC_1;
// Initialize the ADC driver
objectHandle = DRV_ADC_Initialize(DRV_ADC_INDEX_0, (SYS_MODULE_INIT*)&init);
if (SYS_MODULE_OBJ_INVALID == objectHandle)
{
// Handle error
}
5.1.2.7.1.3 DRV_ADC_Reinitialize Function
C
void DRV_ADC_Reinitialize(
SYS_MODULE_OBJ object,
const SYS_MODULE_INIT * const init
);
Description
This function reinitializes and refreshes the hardware for the index instance of the ADC module using the hardware initialization
given data. It does not clear or reinitialize internal data structures (although it may change the value of a few appropriate data
items necessary to manage the new hardware state).
Preconditions
The DRV_ADC_Initialize function should have been called before calling this function.
Parameters
Parameters Description
object Driver object handle, returned from the DRV_ADC_Initialize
Returns
None.
Example
DRV_ADC_INIT init;
SYS_MODULE_OBJ objectHandle; // Returned from DRV_ADC_Initialize
SYS_STATUS adcStatus;
// Populate the init structure
init.moduleInit.value = SYS_MODULE_POWER_RUN_FULL;
init.adcID = ADC_ID_1;
init.initFlags = DRV_ADC_AUTO_SAMPLING;
init.clockFrequency = 4000000; // 4MHz
init.acquisitionTime = ADC_ACQUISITION_TIME_15_TAD;
init.voltageReference = ADC_VREF_POS_TO_VDD_VREF_NEG_TO_VSS;
init.conversionClockPrescaler = ADC_CONV_CLOCK_5_TCY;
init.conversionClockSource = ADC_CLOCK_SRC_INTERNAL_RC;
init.conversionTriggerSource = ADC_CONVERSION_TRIGGER_INTERNAL_COUNT;
init.samplesPerInterrupt = ADC_SAMPLE_PER_INTERRUPT_AT_EACH_SAMPLE;
init.resultFormat = ADC_RESULT_FORMAT_INTEGER_16BIT;
init.analogInput = ADC_INPUT_AN2
init.interruptSource = INT_SOURCE_ADC_1;
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-207
// Reinitialize the ADC driver
DRV_ADC_Reinitialize(objectHandle, (SYS_MODULE_INIT*)&init);
// Check the status of the driver
adcStatus = DRV_ADC_Status(myAdcObj);
if (SYS_STATUS_BUSY == adcStatus)
{
// do something else and check back later
}
else if (SYS_STATUS_ERROR >= adcStatus)
{
// Handle error
}
Remarks: This function can be called multiple times to reinitialize the module.
This operation can be used to refresh any supported hardware registers as
specified by the initialization data or to change the power state of the
module.
This function will NEVER block for hardware access. If the operation requires
time to allow the hardware to reinitialize, it will be reported by the
DRV_ADC_Status operation. The system must use DRV_ADC_Status to find out
when the driver is in the ready state.
Build configuration options may be used to staticaly override options in the
"init" sructure and will take precedance over initialization data passed
using this function.
5.1.2.7.1.4 DRV_ADC_Status Function
C
SYS_STATUS DRV_ADC_Status(
SYS_MODULE_OBJ object
);
Description
This function provides the current status of the ADC driver module.
Preconditions
The DRV_ADC_Initialize function must have been called before calling this function.
Parameters
Parameters Description
object Driver object handle, returned from the DRV_ADC_Initialize
Returns
SYS_STATUS_READY - Indicates that the driver is busy with a previous system level operation and cannot start another
Remarks
Any value greater than SYS_STATUS_READY is also a normal running state in which the driver is ready to accept new
operations.
SYS_STATUS_BUSY - Indicates that the driver is busy with a previous system level operation and cannot start another
SYS_STATUS_ERROR - Indicates that the driver is in an error state
Any value less than SYS_STATUS_ERROR is also an error state.
SYS_MODULE_DEINITIALIZED - Indicates that the driver has been deinitialized
This value is less than SYS_STATUS_ERROR
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-208
The this operation can be used to determine when any of the driver's module level operations has completed.
If the status operation returns SYS_STATUS_BUSY, the a previous operation has not yet completed. Once the status operation
returns SYS_STATUS_READY, any previous operations have completed.
The value of SYS_STATUS_ERROR is negative (-1). Any value less than that is also an error state.
This function will NEVER block waiting for hardware.
If the Status operation returns an error value, the error may be cleared by calling the reinitialize operation. If that fails, the
deinitialize operation will need to be called, followed by the initialize operation to return to normal operations.
Example
SYS_MODULE_OBJ object; // Returned from DRV_TMR_Initialize
SYS_STATUS status;
status = DRV_ADC_Status(object);
else if (SYS_STATUS_ERROR >= status)
{
// Handle error
}
5.1.2.7.1.5 DRV_ADC_Tasks Function
C
void DRV_ADC_Tasks(
SYS_MODULE_OBJ object
);
Description
This function is used to maintain the driver's internal state machine and implement its ISR for interrupt-driven implementations.
Preconditions
The DRV_ADC_Initialize function must have been called for the specified ADC driver instance.
Parameters
Parameters Description
object Object handle for the specified driver instance (returned from DRV_ADC_Initialize)
Returns
None
Remarks
This function is normally not called directly by an application. It is called by the system's Tasks function (SYS_Tasks) or by the
apropriate raw ISR.
This function may excute in an ISR context and will never block or access any resources that may cause it to block.
Example
SYS_MODULE_OBJ object; // Returned from DRV_ADC_Initialize
while (true)
{
DRV_ADC_Tasks (object);
// Do other tasks
}
5.1.2.7.2 Client Core Configuration Functions
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-209
5.1.2.7.2.1 DRV_ADC_ClientStatus Function
C
DRV_ADC_CLIENT_STATUS DRV_ADC_ClientStatus(
DRV_HANDLE handle
);
Description
This function gets the client-specfic status of the ADC driver associated with the given handle.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
Returns
A DRV_ADC_CLIENT_STATUS value describing the current status of the driver.
Remarks
This function will not block for hardware access and will immediately return the current status.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
DRV_ADC_CLIENT_STATUS status;
status = DRV_ADC_ClientStatus(handle);
if(DRV_ADC_CLIENT_STATUS_ERROR >= status)
{
// Handle the error
}
5.1.2.7.2.2 DRV_ADC_Close Function
C
void DRV_ADC_Close(
DRV_HANDLE handle
);
Description
This function closes an opened-instance of the ADC driver, invalidating the handle.
Preconditions
The DRV_ADC_Initialize function must have been called for the specified ADC driver instance.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
Returns
None
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-210
Remarks
After calling this function, the handle passed in "handle" must not be used with any of the remaining driver functions. A new
handle must be obtained by calling DRV_ADC_Open before the caller may use the driver again.
If DRV_IO_INTENT_BLOCKING was requested and the driver was built appropriately to support blocking behavior call may
block until the operation is complete.
If DRV_IO_INTENT_NON_BLOCKING request the driver client can call the DRV_ADC_Status operation to find out when the
module is in the ready state (the handle is no longer valid).
Usually there is no need for the driver client to verify that the Close operation has completed.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
DRV_ADC_Close(handle);
5.1.2.7.2.3 DRV_ADC_InputsRegister Function
C
void DRV_ADC_InputsRegister(
DRV_HANDLE handle,
uint32_t inputsMask
);
Description
This function registers an input set with the driver for sampling.
Preconditions
The DRV_ADC_Initialize function must have been called for the specified ADC device instance and the DRV_ADC_Status must
have returned SYS_STATUS_READY.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
inputsMask Mask bits recognising the various Analog Channels
Returns
None.
Remarks
None.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
DRV_ADC_InputsRegister (handle, ADC_INPUT_AN2|ADC_INPUT_AN3);
5.1.2.7.2.4 DRV_ADC_Open Function
C
DRV_HANDLE DRV_ADC_Open(
const SYS_MODULE_INDEX drvIndex,
const DRV_IO_INTENT intent
);
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-211
Description
This function opens the specified ADC driver instance and provides a handle that must be provided to all other client-level
operations to identify the caller and the instance of the driver.
Preconditions
The DRV_ADC_Initialize function must have been called before calling this function.
Parameters
Parameters Description
drvIndex Identifier for the object instance to be opened
intent Zero or more of the values from the enumeration DRV_IO_INTENT "ORed"
together to indicate the intended use of the driver
Returns
If successful, the function returns a valid open-instance handle (a number identifying both the caller and the module instance).
If an error occurs, the return value is DRV_HANDLE_INVALID.
Remarks
The handle returned is valid until the DRV_ADC_Close function is called.
This function will NEVER block waiting for hardware.
If the DRV_IO_INTENT_BLOCKING is requested and the driver was built appropriately to support blocking behavior, other
client-level operations may block waiting on hardware until they are complete.
If DRV_IO_INTENT_NON_BLOCKING is requested the driver client can call the DRV_ADC_ClientStatus operation to find out
when the module is in the ready state.
If the requested intent flags are not supported, the function will return DRV_HANDLE_INVALID.
Example
DRV_HANDLE handle;
handle = DRV_ADC_Open(DRV_ADC_INDEX_0, DRV_IO_INTENT_EXCLUSIVE);
if (DRV_HANDLE_INVALID == handle)
{
// Unable to open the driver
}
5.1.2.7.2.5 DRV_ADC_SamplesAvailable Function
C
bool DRV_ADC_SamplesAvailable(
DRV_HANDLE handle
);
Description
This function identifies if any the ADC driver has any samples available to read.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
The desired analog input set must have been selected by calling DRV_ADC_InputsRegister.
DRV_ADC_Start must have been called to start the driver sampling and converting analog input samples to digital values.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-212
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
Returns
• true - If one or more samples are available for the registered input set
• false - If no samples are available
Remarks
None.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
DRV_ADC_SAMPLE buffer;
// An input set must have been registered and the ADC started.
if (DRV_ADC_SamplesAvailable(handle))
{
DRV_ADC_SamplesRead(handle, &buffer, sizeof(buffer));
}
5.1.2.7.2.6 DRV_ADC_Start Function
C
void DRV_ADC_Start(
DRV_HANDLE handle
);
Description
This function starts the ADC driver sampling the selected analog inputs and converting the samples to digital values.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
The desired analog input set must have been selected by calling DRV_ADC_InputsRegister.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
Returns
None.
Remarks
Call DRV_ADC_SamplesAvailable to find out when one or more samples is available.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
// Use DRV_ADC_InputsRegister to register the desired inputs.
DRV_ADC_Start(handle);
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-213
5.1.2.7.2.7 DRV_ADC_Stop Function
C
void DRV_ADC_Stop(
DRV_HANDLE handle
);
Description
This function stops the ADC driver from sampling analog inputs and converting the samples to digital values.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
Returns
None.
Remarks
Call DRV_ADC_Start to restart sampling and conversion of analog inputs to digital values.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
DRV_ADC_Stop(handle);
5.1.2.7.3 Other Functions
5.1.2.7.3.1 DRV_ADC_SampleMaxGet Function
C
ADC_SAMPLE DRV_ADC_SampleMaxGet(
DRV_HANDLE handle
);
Description
This function returns the max sample value.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
Returns
Max sample value.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-214
Remarks
None
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
ADC_SAMPLE maxValue, minValue;
maxValue = DRV_ADC_SampleMaxGet(handle);
minValue = DRV_ADC_SampleMinGet(handle);
adcRange = maxValue - minValue;
5.1.2.7.3.2 DRV_ADC_SampleMinGet Function
C
ADC_SAMPLE DRV_ADC_SampleMinGet(
DRV_HANDLE handle
);
Description
This function returns the min sample value.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
Returns
Min sample value.
Remarks
None
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
ADC_SAMPLE maxValue, minValue;
maxValue = DRV_ADC_SampleMaxGet(handle);
minValue = DRV_ADC_SampleMinGet(handle);
adcRange = maxValue - minValue;
5.1.2.7.3.3 DRV_ADC_SamplesRead Function
C
unsigned short DRV_ADC_SamplesRead(
DRV_HANDLE handle,
ADC_SAMPLE * buffer,
unsigned short bufferSize
);
Description
This function reads converted sample data from the ADC driver into the given buffer. How many samples depends on how many
samples are available and on the relative sizes of the samples and the buffer passed in.
Zero (0) samples are copied if the bufferSize is less than the size of a complete set of samples for the registered inputs.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-215
N sets of samples where the bufferSize / size of a complete set of samples = N, unless less than N samples are currently
available. Then, the number of samples currently available are copied.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
The desired analog input set must have been selected by calling DRV_ADC_InputsRegister.
DRV_ADC_Start must have been called to start the driver sampling and converting analog input samples to digital values.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
buffer A pointer to the buffer to where the sample data will be copied
bufferSize Size of the buffer (in bytes)
Returns
Number of bytes of sample data copied to the specified buffer.
Remarks
The DRV_ADC_SamplesAvailable function can be used to determine if any sample data is available.
Calling this function removes the samples from the driver's internal buffer queue of samples.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
ADC_SAMPLE buffer;
// An input set must have been registered and the ADC started.
if (DRV_ADC_SamplesAvailable(handle))
{
DRV_ADC_SamplesRead(handle, &buffer, sizeof(buffer));
}
5.1.2.7.3.4 DRV_ADC_SamplesReadLatest Function
C
unsigned short DRV_ADC_SamplesReadLatest(
DRV_HANDLE handle,
ADC_SAMPLE * buffer,
unsigned short bufferSize
);
Description
This function reads only the most recenly converted sample data from the ADC driver into the given buffer. Only the data for a
single set of samples for the registerd inputs is copied to the caller's buffer. If the buffer size is less than the size of a complete
set of samples for the registerd inputs, no data is copied to the caller's buffer. Also, no sample data is copied to the caller's buffer
if no sample data is currently available.
Preconditions
The DRV_ADC_Initialize function must have been called.
DRV_ADC_Open must have been called to obtain a valid opened device handle.
The desired analog input set must have been selected by calling DRV_ADC_InputsRegister.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-216
DRV_ADC_Start must have been called to start the driver sampling and converting analog input samples to digital values.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open function
buffer A pointer to the buffer to where the sample data will be copied
bufferSize Size of the buffer (in bytes)
Returns
Number of bytes of sample data copied to the specified buffer.
Remarks
The DRV_ADC_SamplesAvailable function can be used to determine if any sample data is available.
This function does not remove any data from the driver's internal buffer queue of sample data.
Example
DRV_HANDLE handle; // Returned from DRV_ADC_Open
ADC_SAMPLE buffer;
// An input set must have been registered and the ADC started.
if (DRV_ADC_SamplesAvailable(handle))
{
DRV_ADC_SamplesReadLatest(handle, &buffer, sizeof(buffer));
}
5.1.2.7.4 Data Types and Constants
5.1.2.7.4.1 DRV_ADC_CLIENT_STATUS Enumeration
C
typedef enum {
DRV_ADC_CLIENT_STATUS_STARTED,
DRV_ADC_CLIENT_STATUS_STOPPED,
DRV_ADC_CLIENT_STATUS_READY,
DRV_ADC_CLIENT_STATUS_BUSY,
DRV_ADC_CLIENT_STATUS_INVALID,
DRV_ADC_CLIENT_STATUS_OVERFLOW,
DRV_ADC_CLIENT_STATUS_BUFFER_TOO_SMALL
} DRV_ADC_CLIENT_STATUS;
Description
ADC Client Status
This enumeration defines the client-specific status codes of the ADC driver.
Members
Members Description
DRV_ADC_CLIENT_STATUS_STARTED ADC Started
DRV_ADC_CLIENT_STATUS_STOPPED stopped on error
DRV_ADC_CLIENT_STATUS_READY Driver OK, ready for client operations
DRV_ADC_CLIENT_STATUS_BUSY An operation is currently in progress
DRV_ADC_CLIENT_STATUS_INVALID Client in an invalid (or un-opened) state
DRV_ADC_CLIENT_STATUS_OVERFLOW Driver Overflowed
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-217
DRV_ADC_CLIENT_STATUS_BUFFER_TOO_SMALL Input Set Read Buffer Too Small
Remarks
Returned by the DRV_ADC_ClientStatus function.
5.1.2.7.4.2 DRV_ADC_INIT Structure
C
typedef struct {
SYS_MODULE_INIT moduleInit;
ADC_MODULE_ID adcId;
DRV_ADC_INIT_FLAGS initFlags;
uint32_t clockFrequency;
ADC_ACQUISITION_TIME acquisitionTime;
ADC_VOLTAGE_REFERENCE voltageReference;
ADC_CONVERSION_CLOCK conversionClockPrescaler;
ADC_CLOCK_SOURCE conversionClockSource;
ADC_CONVERSION_TRIGGER_SOURCE conversionTriggerSource;
ADC_SAMPLES_PER_INTERRUPT samplesPerInterrupt;
ADC_RESULT_FORMAT resultFormat;
ADC_INPUTS_POSITIVE analogInput;
INT_SOURCE interruptSource;
} DRV_ADC_INIT;
Description
ADC Driver Initialization Data
This structure defines the data required to initialize or reinitialize the ADC driver.
Members
Members Description
SYS_MODULE_INIT moduleInit; System module initialization
ADC_MODULE_ID adcId; Identifies timer hardware module (PLIB-level) ID
DRV_ADC_INIT_FLAGS initFlags; Initialization Flags
uint32_t clockFrequency; Clock Frequency
ADC_ACQUISITION_TIME acquisitionTime; Acquisition Time
ADC_VOLTAGE_REFERENCE
voltageReference;
Voltage Reference Selection
ADC_CONVERSION_CLOCK
conversionClockPrescaler;
Clock Setup for the Conversion
ADC_CLOCK_SOURCE
conversionClockSource;
Clock Source for Conversion
ADC_CONVERSION_TRIGGER_SOURCE
conversionTriggerSource;
Conversion Trigger Source
ADC_SAMPLES_PER_INTERRUPT
samplesPerInterrupt;
Samples Per Interrupt valid values = 0- 15
ADC_RESULT_FORMAT resultFormat; Result Format
ADC_INPUTS_POSITIVE analogInput; Input Channel to convert
INT_SOURCE interruptSource; Interrupt Source for the module
Remarks
Not all init features are available for all devices. Refer to the specific data sheet to determine availability.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-218
5.1.2.7.4.3 DRV_ADC_INIT_FLAGS Enumeration
C
typedef enum {
DRV_ADC_STOP_CONVERSION_ON_INTERRUPT,
DRV_ADC_ALTERNATE_INPUT_SAMPLING,
DRV_ADC_AUTO_SAMPLING,
DRV_ADC_MANUAL_SAMPLING
} DRV_ADC_INIT_FLAGS;
Description
ADC Initialization Flags
This data type identifies the initialization flags of the ADC module.
Members
Members Description
DRV_ADC_STOP_CONVERSION_ON_INTERRUPT Stops the conversion on the interrupt
DRV_ADC_ALTERNATE_INPUT_SAMPLING Alternate Input Sampling
DRV_ADC_AUTO_SAMPLING Begin sampling automaticaly after previous conversion
DRV_ADC_MANUAL_SAMPLING Manual Sampling
Remarks
Not all modes are available on all devices. Refer to the specific data sheet to determine availability.
5.1.2.7.4.4 DRV_ADC_ACQUISITION_TIME Macro
C
#define DRV_ADC_ACQUISITION_TIME ADC_ACQUISITION_TIME_4_TAD
Description
ADC Acquisition Time
This macro defines the acquistition time of the ADC driver. This provides static override of the dynamic selection of the
acquisition time. If this macro is defined, this will be used for setting up the acquisition time and not the acquisition time value
provided by DRV_ADC_INIT.
Remarks
None.
5.1.2.7.4.5 DRV_ADC_ALTERNATE_INPUT_SAMPLING_ENABLE Macro
C
#define DRV_ADC_ALTERNATE_INPUT_SAMPLING_ENABLE false
Description
ADC Alternate Input Sampling Enable
This macro enables the alternate input sampling feature of the ADC. This macro can take the following values:
• true - Enables the alternate Input sampling feature of the ADC
• false - Disables the alternate Input sampling feature of the ADC
• DRV_CONFIG_NOT_SUPPORTED - When the feature is not supported on the instance
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-219
Remarks
None.
5.1.2.7.4.6 DRV_ADC_ANALOG_INPUT Macro
C
#define DRV_ADC_ANALOG_INPUT ADC_INPUT_AN2
Description
ADC Analog input channel
This macro defines the analog input channel for the ADC driver. This provides static override of the dynamic selection of the
analog input. If this macro is defined, this will be used for setting up the analog input and not the analog input value provided by
DRV_ADC_INIT.
Remarks
None.
5.1.2.7.4.7 DRV_ADC_AUTO_SAMPLING_ENABLE Macro
C
#define DRV_ADC_AUTO_SAMPLING_ENABLE true
Description
ADC Auto Sampling Enable
This macro enables the auto-sampling feature of the ADC. This macro can take the following values:
• true - Enables the auto-sampling feature of the ADC
• false - Disables the auto-sampling feature of the ADC
• DRV_CONFIG_NOT_SUPPORTED - When the feature is not supported on the instance
Remarks
None.
5.1.2.7.4.8 DRV_ADC_CLIENTS_NUMBER Macro
C
#define DRV_ADC_CLIENTS_NUMBER 1
Description
ADC Maximum Number of Clients
This definition selectd the maximum number of clients that the ADC driver can support at run time.
Remarks
None.
5.1.2.7.4.9 DRV_ADC_CONVERSION_CLOCK_PRESCALER Macro
C
#define DRV_ADC_CONVERSION_CLOCK_PRESCALER ADC_CONV_CLOCK_4_TCY
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-220
Description
ADC Conversion Clock
This macro defines the conversion clock for the ADC driver. This provides static override of the dynamic selection of the
conversion clock. If this macro is defined, this will be used for setting up the conversion clock and not the conversion clock value
provided by DRV_ADC_INIT.
Remarks
None.
5.1.2.7.4.10 DRV_ADC_CONVERSION_CLOCK_SOURCE Macro
C
#define DRV_ADC_CONVERSION_CLOCK_SOURCE ADC_CLOCK_SRC_SYSTEM_CLOCK
Description
ADC Conversion Clock Source
This macro defines the conversion clock source for the ADC driver. This provides static override of the dynamic selection of the
conversion clock source. If this macro is defined, this will be used for setting up the conversion clock source and not the
conversion clock source value provided by DRV_ADC_INIT.
Remarks
None.
5.1.2.7.4.11 DRV_ADC_CONVERSION_TRIGGER_SOURCE Macro
C
#define DRV_ADC_CONVERSION_TRIGGER_SOURCE ADC_CONVERSION_TRIGGER_INTERNAL_COUNT
Description
Conversion Trigger Source
This macro defines the conversion trigger source for the ADC driver. This provides static override of the dynamic selection of the
conversion trigger source. If this macro is defined, this will be used for setting up the conversion trigger source and not the
conversion trigger source value provided by DRV_ADC_INIT.
Remarks
None.
5.1.2.7.4.12 DRV_ADC_INDEX Macro
C
#define DRV_ADC_INDEX DRV_ADC_INDEX_0
Description
ADC Static Index Selection
ADC static index selection for the driver object reference.
Remarks
This index is required to make a reference to the driver object.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-221
5.1.2.7.4.13 DRV_ADC_INDEX_0 Macro
C
#define DRV_ADC_INDEX_0 0
Description
Driver ADC Module Index Numbers
These constants provide ADC driver index definitions.
Remarks
These constants should be used in place of hard-coded numeric literals.
These values should be passed into the DRV_ADC_Initialize function to identify the driver instance in use.
5.1.2.7.4.14 DRV_ADC_INDEX_1 Macro
C
#define DRV_ADC_INDEX_1 1
Description
This is macro DRV_ADC_INDEX_1.
5.1.2.7.4.15 DRV_ADC_INDEX_2 Macro
C
#define DRV_ADC_INDEX_2 2
Description
This is macro DRV_ADC_INDEX_2.
5.1.2.7.4.16 DRV_ADC_INDEX_COUNT Macro
C
#define DRV_ADC_INDEX_COUNT _ADC_EXISTS
Description
Driver ADC Driver Module Index Count
This constant identifies ADC driver index definitions.
Remarks
This constant should be used in place of hard-coded numeric literals.
This value is device-specific.
5.1.2.7.4.17 DRV_ADC_INSTANCES_NUMBER Macro
C
#define DRV_ADC_INSTANCES_NUMBER 1
Description
ADC hardware instance configuration
This macro sets up the maximum number of hardware instances that can be supported.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-222
Remarks
None.
5.1.2.7.4.18 DRV_ADC_INTERNAL_BUFFER_SIZE Macro
C
#define DRV_ADC_INTERNAL_BUFFER_SIZE 2
Description
ADC Internal buffer size
This macro defines the internal buffer size.
Remarks
None.
5.1.2.7.4.19 DRV_ADC_INTERRUPT_MODE Macro
C
#define DRV_ADC_INTERRUPT_MODE true
Description
ADC Interrupt And Polled Mode Operation Control
This macro controls the operation of the driver in the interrupt mode of operation. The possible values of this macro are:
• true - Select if interrupt mode of adc operation is desired
• false - Select if polling mode of adc operation is desired
Not defining this option to true or false will result in a build error.
Remarks
None.
5.1.2.7.4.20 DRV_ADC_INTERRUPT_SOURCE Macro
C
#define DRV_ADC_INTERRUPT_SOURCE PLIB_INT_SOURCE_ADC_1
Description
ADC Interrupt Source
Macro to define the interrupt source of the static driver.
Remarks
Refer to the Interrupt Peripheral Library document for more information on the PLIB_INT_SOURCE enumeration.
5.1.2.7.4.21 DRV_ADC_PERIPHERAL_ID Macro
C
#define DRV_ADC_PERIPHERAL_ID ADC_ID_1
Description
ADC PLIB ID Selection
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-223
This macro selects the ADC PLIB ID Selection. This is an intialization override of the adcID member of the intialization
configuration.
Remarks
None.
5.1.2.7.4.22 DRV_ADC_POWER_STATE Macro
C
#define DRV_ADC_POWER_STATE SYS_MODULE_POWER_IDLE_STOP
Description
ADC power state configuration
This macro controls the power state of the ADC.
Remarks
This feature may not be available in the device or the ADC module selected.
5.1.2.7.4.23 DRV_ADC_RESULT_FORMAT Macro
C
#define DRV_ADC_RESULT_FORMAT ADC_RESULT_FORMAT_INTEGER_16BIT
Description
ADC Data Output Format
This macro defines the data output format for the ADC driver. This provides static override of the dynamic selection of the data
output format. If this macro is defined, this will be used for setting up the data output format and not the data output format value
provided by DRV_ADC_INIT.
Remarks
None.
5.1.2.7.4.24 DRV_ADC_SAMPLES_PER_INTERRUPT Macro
C
#define DRV_ADC_SAMPLES_PER_INTERRUPT 2
Description
Samples per Interrupt
This macro defines the samples per interrupt of the ADC driver. This provides static override of the dynamic selection of the
sample per interrupt. If this macro is defined, this will be used for setting up the samples per interrupt and not the samples per
interrupt value provided by DRV_ADC_INIT.
Remarks
Select this size based on the device available and the number of samples that are required to form a set.
5.1.2.7.4.25 DRV_ADC_STOP_ON_CONVERSION_ENABLE Macro
C
#define DRV_ADC_STOP_ON_CONVERSION_ENABLE false
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-224
Description
ADC Stop on conversion Enable
This macro enables the stop on conversion feature of the ADC. This macro can take the following values:
• true - Enables the ADC to stop on conversion
• false - Disables the ADC to stop on conversion
• DRV_CONFIG_NOT_SUPPORTED - When the feature is not supported on the instance
Remarks
None.
5.1.2.7.4.26 DRV_ADC_VOLTAGE_REFERENCE Macro
C
#define DRV_ADC_VOLTAGE_REFERENCE ADC_VREF_POS_TO_VDD_VREF_NEG_TO_VSS
Description
ADC Voltage Reference
This macro defines the voltage reference of the ADC driver. This provides static override of the dynamic selection of the voltage
reference. If this macro is defined, this will be used for setting up the voltage reference and not the voltage reference value
provided by DRV_ADC_INIT.
Remarks
None.
5.1.2.8 Files
Files
Name Description
drv_adc.h ADC Driver interface definition.
Description
5.1.2.8.1 drv_adc.h
ADC Driver Interface Definition
The ADC device driver provides a simple interface to manage the ADC modules on Microchip microcontrollers. This file defines
the interface definition for the ADC driver.
Enumerations
Name Description
DRV_ADC_CLIENT_STATUS Defines the client-specific status of the ADC driver.
DRV_ADC_INIT_FLAGS Identifies the initialization flags of the ADC module.
5.1 Driver Library Help MPLAB Harmony Help ADC Driver Library
5-225
Functions
Name Description
DRV_ADC_ClientStatus Gets the current client-specific status the ADC driver.
DRV_ADC_Close Closes an opened-instance of the ADC driver.
DRV_ADC_Deinitialize Deinitializes the specified instance of the ADC driver module.
DRV_ADC_Initialize Initializes the ADC driver.
DRV_ADC_InputsRegister Registers an input set with the driver for sampling.
DRV_ADC_Open Opens the specified ADC driver instance and returns a handle to it.
DRV_ADC_Reinitialize Reinitializes the ADC instance for the specified module ID.
DRV_ADC_SampleMaxGet Gets the max sample value.
DRV_ADC_SampleMinGet Gets the min sample value.
DRV_ADC_SamplesAvailable Identifies if any the ADC driver has any samples available to read.
DRV_ADC_SamplesRead Reads the converted sample data from the ADC driver.
DRV_ADC_SamplesReadLatest Reads the most recently converted sample data from the ADC driver.
DRV_ADC_Start Starts the ADC driver sampling and converting analog to digital values.
DRV_ADC_Status Provides the current status of the ADC driver module.
DRV_ADC_Stop Stops the ADC driver from sampling and converting analog to digital values.
DRV_ADC_Tasks Maintains the driver's state machine and implements its ISR.
Macros
Name Description
DRV_ADC_INDEX_0 ADC driver index definitions.
DRV_ADC_INDEX_1 This is macro DRV_ADC_INDEX_1.
DRV_ADC_INDEX_2 This is macro DRV_ADC_INDEX_2.
DRV_ADC_INDEX_COUNT Number of valid ADC driver indices.
Structures
Name Description
DRV_ADC_INIT Defines the data required to initialize or reinitialize the ADC driver.
File Name
drv_adc.h
Company
Microchip Technology Inc.
5.1.3 Ethernet MAC Driver Library
5.1.3.1 Introduction
Ethernet (Media Access) Controller Driver Library
for
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-226
Microchip Microcontrollers
This library provides a driver-level abstraction of the on-chip Ethernet Controller found on many PIC32 devices.
The "Host-To-Network" layer of a TCP/IP stack organization covers the Data Link and Physical Layers of the standard OSI stack.
The Ethernet Controller provides the Data Link or Media Access Control Layer, in addition to other functions discussed below.
An external Ethernet "PHY" provides the Physical layer, providing conversion between the digital and analog.
Description
The PIC32 Ethernet Controller is a bus master module that interfaces with an off-chip PHY in order to implement a complete
Ethernet node in a system. The following are some of the key features of this module:
• Supports 10/100 Ethernet
• Full-Duplex and Half-Duplex operation
• Broadcast, Multicast and Unicast packets
• Manual and automatic flow control
• Supports Auto-MDIX enabled PHYs
• Reduced Media Independent Interface (RMII) and Media Independent Interface (MII) PHY data interfaces
• Performance statistics metrics in hardware.
• RAM descriptor based DMA operation for both receive and transmit path
• Fully configurable interrupts
• Configurable receive packet filtering using:
• 64-bit Hash Table
• 64-byte Pattern Match
• Magic Packet™Filtering
• Runt Packet Detection and Filtering
• Supports Packet Payload Checksum calculation
• CRC Check
Support for the Serial Management Interface (SMI) (also known as the MIIM interface) is provided by the Ethernet PHY Driver
Library.
5.1.3.2 Release Notes
MPLAB Harmony Version: v0.70b Ethernet MAC Library Version : 7.10 Release Date: 18Nov2013
New This Release:
This is the first release of the library. The interface can change in the beta and\or 1.0 release.
Known Issues:
Nothing to report in this release.
5.1.3.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-227
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
5.1.3.4 Using the Library
This topic describes the basic architecture of the Ethernet MAC Driver Library and provides information and examples on how to
use it.
Interface Header File: drv_ethmac.h
The interface to the Ethernet MAC library is defined in the "drv_ethmac.h" header file. This file is included by the "drv_ethmac.h"
file. Any C language source (.c) file that uses the Ethernet MAC Driver Library should include "drv.h".
Library File:
The Ethernet MAC Driver Library archive (.a) file is installed with MPLAB Harmony.
Please refer to the MPLAB Harmony Overview for how the library interacts with the framework.
5.1.3.4.1 Abstraction Model
The Ethernet Controller provides the modules needed to implement a 10/100 Mbps Ethernet node using an external Ethernet
PHY chip. The PHY chip provides a digital-analog interface as part of the Physical Layer and the controller provides the Media
Access Controller (MAC) layer above the PHY.
As shown in Figure 1, the Ethernet Controller consists of the following modules:
• Media Access Control (MAC) block: Responsible for implementing the MAC functions of the Ethernet IEEE 802.3 Specification
• Flow Control (FC) block: Responsible for control of the transmission of PAUSE frames. (Reception of PAUSE frames is
handled within the MAC.)
• RX Filter (RXF) block: This module performs filtering on every receive packet to determine whether each packet should be
accepted or rejected
• TX DMA/TX Buffer Management Engine: The TX DMA and TX Buffer Management engines perform data transfers from the
memory (using descriptor tables) to the MAC Transmit Interface
• RX DMA/RX Buffer Management Engine: The RX DMA and RX Buffer Management engines transfer receive packets from the
MAC to the memory (using descriptor tables)
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-228
Figure 1: Ethernet Controller Block Diagram
For completeness, we also need to look at the interface diagram of a representative Ethernet PHY. As shown in Figure 2, the
PHY has two interfaces, one for configuring and managing the PHY (SMI/MIIM) and another for transmit and receive data (RMII
or MII). The SMI/MIIM interface is the responsibility of the Ethernet PHY Driver Library. When setting up the Ethernet PHY this
library calls primitives from the Ethernet PHY Driver library. The RMII/MII interface is the responsibility of the Ethernet MAC
Driver Library (this library).
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-229
Figure 2: Ethernet PHY Interfaces
5.1.3.4.2 Library Overview
Refer to the section Driver Overview for how the driver operates in a system.
The library interface routines are divided into various sub-sections, each of sub-section addresses one of the blocks or the
overall operation of the Ethernet MAC Driver Library.
Library Interface Section Description
Client Level Functions PIC32MACOpen, PIC32MACClose, and PIC32MACSetup to support the
TCP/IP Stack. Plus link status and power options.
Get and Put Functions Get/Put functions for bytes, byte arrays, and Ethernet headers.
Base Address and Buffer Size Functions Base address and sizes for buffers.
Receive Functions Receive routines.
Transmit Functions Transmit routines.
Events Ethernet event support routines.
Other Functions Checksum support, memory copying, version support.
Data Types and Constants Typedefs and #defines.
5.1.3.4.3 MPLAB Harmony vs. Unified Stack Functions
The following is a cross-reference linking MPLAB Harmony functions with functions from the legacy TCP/IP Stack:
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-230
MPLAB Harmony Function: MCHP_tcpip_unified Function:
DRV_ETHMAC_BaseAddrTxGet
DRV_ETHMAC_RxPacketDiscard
DRV_ETHMAC_EventAck
DRV_ETHMAC_EventDeInit
DRV_ETHMAC_EventInit
DRV_ETHMAC_EventNotifyClear
DRV_ETHMAC_EventNotifyHandlerSet
DRV_ETHMAC_EventNotifySet
DRV_ETHMAC_EventPendingGet
DRV_ETHMAC_ByteArrayGet
DRV_ETHMAC_HeaderGet
DRV_ETHMAC_IPBufferChecksumCalc
DRV_ETHMAC_LinkCheck
DRV_ETHMAC_MemoryCopyIsDone
DRV_ETHMAC_PIC32MACClose
DRV_ETHMAC_PIC32MACOpen
DRV_ETHMAC_PIC32MACSetup
DRV_ETHMAC_PIC32MACTeardown
DRV_ETHMAC_PowerMode
DRV_ETHMAC_ByteArrayPut
DRV_ETHMAC_HeaderPut
DRV_ETHMAC_ReadPointerBaseSet
DRV_ETHMAC_ReadPointerSet
DRV_ETHMAC_RxChecksumCalc
DRV_ETHMAC_RxHashTableEntrySet
DRV_ETHMAC_RxReadPointerGet
DRV_ETHMAC_RxReadPointerSet
DRV_ETHMAC_TxBufferFlush
DRV_ETHMAC_TxIsReady
DRV_ETHMAC_VersionGet
DRV_ETHMAC_VersionStrGet
DRV_ETHMAC_WritePointerSet
PIC32MACGetTxBaseAddr
PIC32MACDiscardRx
PIC32MACEventAck
PIC32MACEventDeInit
PIC32MACEventInit
PIC32TCPIP_MAC_EventNotifyClear
PIC32MACEventSetNotifyHandler
PIC32MACEventSetNotifyEvents
PIC32MACEventGetPending
PIC32MACGetArray
PIC32MACGetHeader
PIC32MACCalcIPBufferChecksum
PIC32MACCheckLink
PIC32MACIsMemCopyDone
PIC32MACClose
PIC32MACOpen
PIC32MACInitialize
PIC32MACDeinitialize
PIC32MACPowerMode
PIC32MACPutArray
PIC32MACPutHeader
PIC32MACSetBaseReadPtr
PIC32MACSetReadPtr
PIC32MACCalcRxChecksum
PIC32MACSetRXHashTableEntry
PIC32MACGetReadPtrInRx
PIC32MACSetReadPtrInRx
PIC32MACFlush
PIC32MACIsTxReady
-none-
-nonePIC32MACSetWritePtr
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-231
MCHP_tcpip_unified Function MPLAB Harmony Function:
PIC32MACCalcIPBufferChecksum
PIC32MACCalcRxChecksum
PIC32MACCheckLink
PIC32MACDeinitialize
PIC32MACDiscardRx
PIC32MACEventAck
PIC32MAC_EventNotifyClear
PIC32MACEventDeInit
PIC32MACEventGetPending
PIC32MACEventInit
PIC32MACEventSetNotifyEvents
PIC32MACEventSetNotifyHandler
PIC32MACFlush
PIC32MACGetArray
PIC32MACGetHeader
PIC32MACGetReadPtrInRx
PIC32MACGetTxBaseAddr
PIC32MACIsMemCopyDone
PIC32MACIsTxReady
PIC32MACDeinitialize
PIC32MACInitialize
PIC32MACOpen
PIC32MACClose
PIC32MACPowerMode
PIC32MACPutArray
PIC32MACPutHeader
PIC32MACSetBaseReadPtr
PIC32MACSetRXHashTableEntry
PIC32MACSetReadPtr
PIC32MACSetReadPtrInRx
PIC32MACSetWritePtr
DRV_ETHMAC_IPBufferChecksumCalc
DRV_ETHMAC_RxChecksumCalc
DRV_ETHMAC_LinkCheck
DRV_ETHMAC_PIC32MACTeardown
DRV_ETHMAC_RxPacketDiscard
DRV_ETHMAC_EventAck
DRV_ETHMAC_EventNotifyClear
DRV_ETHMAC_EventDeInit
DRV_ETHMAC_EventPendingGet
DRV_ETHMAC_EventInit
DRV_ETHMAC_EventNotifySet
DRV_ETHMAC_EventNotifyHandlerSet
DRV_ETHMAC_TxBufferFlush
DRV_ETHMAC_ByteArrayGet
DRV_ETHMAC_HeaderGet
DRV_ETHMAC_RxReadPointerGet
DRV_ETHMAC_BaseAddrTxGet
DRV_ETHMAC_MemoryCopyIsDone
DRV_ETHMAC_TxIsReady
DRV_ETHMAC_PIC32MACTeardown
DRV_ETHMAC_PIC32MACSetup
DRV_ETHMAC_PIC32MACOpen
DRV_ETHMAC_PIC32MACClose
DRV_ETHMAC_PowerMode
DRV_ETHMAC_ByteArrayPut
DRV_ETHMAC_HeaderPut
DRV_ETHMAC_ReadPointerBaseSet
DRV_ETHMAC_RxHashTableEntrySet
DRV_ETHMAC_ReadPointerSet
DRV_ETHMAC_RxReadPointerSet
DRV_ETHMAC_WritePointerSet
DRV_ETHMAC_VersionGet
DRV_ETHMAC_VersionStrGet
5.1.3.4.4 Support for Legacy "Ethernet Controller Library"
These routines (DRV_ETHMAC_Legacy*) provide MPLAB Harmony support for applications that use the "Ethernet Controller
Library for Microchip PIC32MX Microcontrollers" that is installed with XC32 compilers. (See
Microchip\xc32\v1.20\docs\pic32-lib-help\hlpETH.chm for information on this legacy support.)
For some functions the argument list is the same, but for others the addition of an index value from the ETH_MODULE_ID
enumeration has been added to make the function work from within the context of this MPLAB Harmony driver.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-232
Legacy Controller Library MPLAB Harmony
EthClose
EthDescriptorGetBuffer
EthDescriptorsPoolAdd
EthDescriptorsPoolCleanUp
EthDescriptorsPoolRemove
EthEventsClr
EthEventsEnableClr
EthEventsEnableGet
EthEventsEnableSet
EthEventsEnableWrite
EthEventsGet
EthInit
EthMACGetAddress
EthMACOpen
EthMACSetAddress
EthMACSetMaxFrame
EthRxAcknowledgeBuffer
EthRxAcknowledgePacket
EthRxBuffersAppend
EthRxFiltersClr
EthRxFiltersHTSet
EthRxFiltersPMClr
EthRxFiltersPMSet
EthRxFiltersSet
EthRxFiltersWrite
EthRxGetBuffer
EthRxGetPacket
EthRxSetBufferSize
EthStatRxAlgnErrCnt
EthStatRxFcsErrCnt
EthStatRxOkCnt
EthStatRxOvflCnt
EthStatTxMColCnt
EthStatTxOkCnt
EthStatTxSColCnt
EthTxAcknowledgeBuffer
EthTxAcknowledgePacket
EthTxGetBufferStatus
EthTxGetPacketStatus
EthTxSendBuffer
EthTxSendPacket
DRV_ETHMAC_LegacyClose
DRV_ETHMAC_LegacyDescriptorGetBuffer
DRV_ETHMAC_LegacyDescriptorsPoolAdd
DRV_ETHMAC_LegacyDescriptorsPoolCleanUp
DRV_ETHMAC_LegacyDescriptorsPoolRemove
PLIB_ETH_LegacyEventsClr
PLIB_ETH_LegacyEventsEnableClr
PLIB_ETH_LegacyEventsEnableGet
PLIB_ETH_LegacyEventsEnableSet
PLIB_ETH_LegacyEventsEnableWrite
PLIB_ETH_LegacyEventsGet
DRV_ETHMAC_LegacyInit
PLIB_ETH_LegacyMACGetAddress
DRV_ETHMAC_LegacyMACOpen
PLIB_ETH_LegacyMACSetAddress
PLIB_ETH_LegacyMACSetMaxFrame
DRV_ETHMAC_LegacyRxAcknowledgeBuffer
DRV_ETHMAC_LegacyRxAcknowledgePacket
DRV_ETHMAC_LegacyRxBuffersAppend
PLIB_ETH_LegacyRxFiltersClr
PLIB_ETH_LegacyRxFiltersHTSet
PLIB_ETH_LegacyRxFiltersPMClr
PLIB_ETH_LegacyRxFiltersPMSet
PLIB_ETH_LegacyRxFiltersSet
PLIB_ETH_LegacyRxFiltersWrite
DRV_ETHMAC_LegacyRxGetBuffer
DRV_ETHMAC_LegacyRxGetPacket
PLIB_ETH_LegacyRxSetBufferSize
PLIB_ETH_LegacyStatRxAlgnErrCnt
PLIB_ETH_LegacyStatRxFcsErrCnt
PLIB_ETH_LegacyStatRxOkCnt
PLIB_ETH_LegacyStatRxOvflCnt
PLIB_ETH_LegacyStatTxMColCnt
PLIB_ETH_LegacyStatTxOkCnt
PLIB_ETH_LegacyStatTxSColCnt
DRV_ETHMAC_LegacyTxAcknowledgeBuffer
DRV_ETHMAC_LegacyTxAcknowledgePacket
DRV_ETHMAC_LegacyTxGetBufferStatus
DRV_ETHMAC_LegacyTxGetPacketStatus
DRV_ETHMAC_LegacyTxSendBuffer
DRV_ETHMAC_LegacyTxSendPacket
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-233
MAC Driver Function Legacy Controller Library
DRV_ETHMAC_LegacyClose
DRV_ETHMAC_LegacyDescriptorGetBuffer
DRV_ETHMAC_LegacyDescriptorsPoolAdd
DRV_ETHMAC_LegacyDescriptorsPoolCleanUp
DRV_ETHMAC_LegacyDescriptorsPoolRemove
DRV_ETHMAC_LegacyInit
DRV_ETHMAC_LegacyMACOpen
DRV_ETHMAC_LegacyRxAcknowledgeBuffer
DRV_ETHMAC_LegacyRxAcknowledgePacket
DRV_ETHMAC_LegacyRxBuffersAppend
DRV_ETHMAC_LegacyRxGetBuffer
DRV_ETHMAC_LegacyRxGetPacket
DRV_ETHMAC_LegacyTxAcknowledgeBuffer
DRV_ETHMAC_LegacyTxAcknowledgePacket
DRV_ETHMAC_LegacyTxGetBufferStatus
DRV_ETHMAC_LegacyTxGetPacketStatus
DRV_ETHMAC_LegacyTxSendBuffer
DRV_ETHMAC_LegacyTxSendPacket
EthClose
EthDescriptorGetBuffer
EthDescriptorsPoolAdd
EthDescriptorsPoolCleanUp
EthDescriptorsPoolRemove
EthInit
EthMACOpen
EthRxAcknowledgeBuffer
EthRxAcknowledgePacket
EthRxBuffersAppend
EthRxGetBuffer
EthRxGetPacket
EthTxAcknowledgeBuffer
EthTxAcknowledgePacket
EthTxGetBufferStatus
EthTxGetPacketStatus
EthTxSendBuffer
EthTxSendPacket
5.1.3.5 Configuring the Library
Macros
Name Description
DRV_ETHMAC_CLIENTS_NUMBER Selects the maximum number of clients.
DRV_ETHMAC_INDEX Ethernet MAC static index selection.
DRV_ETHMAC_INSTANCES_NUMBER Selects the maximum number of hardware instances that can be
supported by the dynamic driver.
DRV_ETHMAC_INTERRUPT_MODE Controls operation of the driver in the interrupt or polled mode.
DRV_ETHMAC_INTERRUPT_SOURCE Defines an override of the interrupt source in case of static driver.
DRV_ETHMAC_PERIPHERAL_ID Defines an override of the peripheral ID.
DRV_ETHMAC_POWER_STATE Defines an override of the power state of the Ethernet MAC driver.
Description
The configuration of the Ethernet MAC Driver is based on the file sys_config.h
This header file contains the configuration selection for the Ethernet MAC Driver. Based on the selections made, the Ethernet
MAC Driver will support or not support selected features. These configuration settings will apply to all instances of the Ethernet
MAC DRiver.
This header can be placed anywhere; however, the path of this header needs to be present in the include search path for a
successful build. Refer to the Applications Overview section for more details.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-234
5.1.3.5.1 DRV_ETHMAC_CLIENTS_NUMBER Macro
C
#define DRV_ETHMAC_CLIENTS_NUMBER 1
Description
Ethernet MAC Maximum Number of Clients
This definition select the maximum number of clients that the Ethernet MAC driver can support at run time. Not defining it means
using a single client.
Remarks
None.
5.1.3.5.2 DRV_ETHMAC_INDEX Macro
C
#define DRV_ETHMAC_INDEX DRV_ETHMAC_INDEX_1
Description
Ethernet MAC Static Index Selection
This definition selects the Ethernet MAC static index for the driver object reference
Remarks
This index is required to make a reference to the driver object.
5.1.3.5.3 DRV_ETHMAC_INSTANCES_NUMBER Macro
C
#define DRV_ETHMAC_INSTANCES_NUMBER 1
Description
Ethernet MAC hardware instance configuration
This definition selects the maximum number of hardware instances that can be supported by the dynamic driver. Not defining it
means using a static driver.
Remarks
None.
5.1.3.5.4 DRV_ETHMAC_INTERRUPT_MODE Macro
C
#define DRV_ETHMAC_INTERRUPT_MODE true
Description
Ethernet MAC Interrupt And Polled Mode Operation Control
This macro controls the operation of the driver in the interrupt mode of operation. The possible values of this macro are:
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-235
• true - Select if interrupt mode of timer operation is desired
• false - Select if polling mode of timer operation is desired
Not defining this option to true or false will result in a build error.
Remarks
None.
5.1.3.5.5 DRV_ETHMAC_INTERRUPT_SOURCE Macro
C
#define DRV_ETHMAC_INTERRUPT_SOURCE INT_SOURCE_ETH_1
Description
Ethernet MAC Interrupt Source
Defines an override of the interrupt source in case of static driver.
Remarks
Refer to the INT PLIB document for more information on INT_SOURCE enumeration.
5.1.3.5.6 DRV_ETHMAC_PERIPHERAL_ID Macro
C
#define DRV_ETHMAC_PERIPHERAL_ID ETHMAC_ID_1
Description
Ethernet MAC Peripheral ID Selection
Defines an override of the peripheral ID, using macros.
Remarks
Some devices also support ETHMAC_ID_0
5.1.3.5.7 DRV_ETHMAC_POWER_STATE Macro
C
#define DRV_ETHMAC_POWER_STATE SYS_MODULE_POWER_IDLE_STOP
Description
Ethernet MAC power state configuration
Defines an override of the power state of the Ethernet MAC driver.
Remarks
This feature may not be available in the device or the Ethernet MAC module selected.
5.1.3.6 Building the Library
This section list the files that are available in the \src of the Ethernet MAC Driver. It lists which files need to be included in the
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-236
build based on either a hardware feature present on the board or configuration option selected by the system.
5.1.3.7 Library Interface
Data Types and Constants
Name Description
ETH_CLOSE_FLAGS Defines the possible disable codes of Ethernet controller
"DRV_ETHMAC_LegacyClose" call.
ETH_LINK_STATUS Defines the possible status flags of Ethernet link.
ETH_MODULE_STATUS Defines the possible status codes of the Ethernet controller.
ETH_OPEN_FLAGS Supported open configuration flags for the Ethernet module (EthMACOpen).
ETH_PAUSE_TYPE Defines the possible Ethernet MAC pause types.
ETH_RESULT_CODE Defines the possible results of Ethernet operations that can succeed or fail
ETHPHY_CONFIG_FLAGS flags for DRV_ETHPHY_Setup() call
DRV_ETHMAC_INDEX_1 This is macro DRV_ETHMAC_INDEX_1.
DRV_ETHPHY_INDEX_1 This is macro DRV_ETHPHY_INDEX_1.
Client Level Functions
Name Description
DRV_ETHMAC_PIC32MACClose Closes a client instance of the PIC32 MAC Driver.
DRV_ETHMAC_PIC32MACGetConfig Supports PIC32 Ethernet MAC by copying its configuration..
DRV_ETHMAC_PIC32MACLinkCheck Checks current link status.
DRV_ETHMAC_PIC32MACOpen Opens a client instance of the PIC32 MAC Driver.
DRV_ETHMAC_PIC32MACSetup Supports PIC32 Ethernet MAC setup.
DRV_ETHMAC_PIC32MACTeardown Supports PIC32 Ethernet MAC Teardown (opposite of setup).
Event Functions
Name Description
DRV_ETHMAC_PIC32MACEventAcknowledge This function acknowledges and re-enables processed events.
Multiple events can be orr-ed together as they are processed
together. The events acknowledged by this function should be the
events that have been retrieved from the stack by calling
DRV_ETHMAC_PIC32MACEventPendingGet() or have been
passed to the user by the stack using the notification handler
(PIC32MACEventSetNotifyHandler()) and have been processed
and have to be re-enabled.
DRV_ETHMAC_PIC32MACEventMaskSet Enables the MAC events.
DRV_ETHMAC_PIC32MACEventPendingGet Returns the currently pending events.
Other Functions
Name Description
DRV_ETHMAC_PIC32MACPowerMode Powers down the Ethernet MAC.
DRV_ETHMAC_PIC32MACProcess MAC periodic processing function.
Receive Functions
Name Description
DRV_ETHMAC_PIC32MACPacketRx A packet is returned if such a pending packet exists.
DRV_ETHMAC_PIC32MACPacketTx A packet is submitted to the MAC driver for transmission.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-237
Transmit Functions
Name Description
DRV_ETHMAC_PIC32MACRxFilterHashTableEntrySet Calculates a CRC-32 and sets the approriate bit in the
ETHHTx registers
Description
5.1.3.7.1 Client Level Functions
5.1.3.7.1.1 DRV_ETHMAC_PIC32MACClose Function
C
TCPIP_MAC_RES DRV_ETHMAC_PIC32MACClose(
TCPIP_MAC_HANDLE hMac
);
Description
This function closes a client instance of the PIC32 MAC Driver.
Preconditions
DRV_ETHMAC_PIC32MACOpen should have been called.
Parameters
Parameters Description
macId MAC idenfification, from the TCPIP_STACK_MODULE enumeration
Returns
TCPIP_MAC_RES_OK if initialization completed; otherwise, the error enumeration value.
Example
5.1.3.7.1.2 DRV_ETHMAC_PIC32MACGetConfig Function
C
size_t DRV_ETHMAC_PIC32MACGetConfig(
TCPIP_STACK_MODULE modId,
void* configBuff,
size_t buffSize,
size_t* pConfigSize
);
Description
Supports PIC32 Ethernet MAC Teardown (opposite of Setup). Used by tcpip_module_manager.
Preconditions
Supports PIC32 Ethernet MAC by copying its configuration..
Parameters
Parameters Description
modId Module ID from TCPIP_STACK_MODULE enumeration, identifying MAC.
configBuff Pointer to configuration buffer to be copied
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-238
buffSize Size of configuration buffer provided by configBuff
pConfigSize Pointer to size of configuration buffer copied.
Returns
Size of configuration buffer copied.
Remarks
This function deinitializes the Eth controller, the MAC and the associated PHY. It should be called to be able to schedule any Eth
transmit or receive operation.
Example
5.1.3.7.1.3 DRV_ETHMAC_PIC32MACLinkCheck Function
C
bool DRV_ETHMAC_PIC32MACLinkCheck(
TCPIP_MAC_HANDLE hMac
);
Description
This function checks the link status, performing a MAC reconfiguration if the link went up after being down.
Preconditions
None.
Parameters
Parameters Description
hMac Ethernet MAC client handle
Returns
• true - If the link is up
• false - If the link is not up
Remarks
If auto negotiation is enabled the MAC we may have to be reconfigured.
Example
5.1.3.7.1.4 DRV_ETHMAC_PIC32MACOpen Function
C
TCPIP_MAC_HANDLE DRV_ETHMAC_PIC32MACOpen(
TCPIP_STACK_MODULE macId
);
Description
This function opens a client instance of the PIC32 MAC Driver. Used by tcpip_module_manager.
Preconditions
DRV_ETHMAC_PIC32MACSetup should have been called.
Parameters
Parameters Description
macId MAC idenfification, from the TCPIP_STACK_MODULE enumeration
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-239
Returns
TCPIP_MAC_HANDLE - handle (pointer) to MAC client
Example
5.1.3.7.1.5 DRV_ETHMAC_PIC32MACSetup Function
C
TCPIP_MAC_RES DRV_ETHMAC_PIC32MACSetup(
TCPIP_MAC_MODULE_CTRL* const stackData,
const TCPIP_MODULE_MAC_PIC32INT_CONFIG* initData
);
Description
This function supports setup of the PIC32 Ethernet MAC. Used by tcpip_module_manager.
Preconditions
DRV_ETHMAC_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
pStackData Pointer to stack data
initData Pointer to initialization data
Returns
TCPIP_MAC_RES_OK if initialization completed; otherwise, error enumeration value.
Remarks
This function initializes the Ethernet controller, the MAC and the associated PHY. It should be called to be able to schedule any
Ethernet transmit or receive operation.
Example
5.1.3.7.1.6 DRV_ETHMAC_PIC32MACTeardown Function
C
TCPIP_MAC_RES DRV_ETHMAC_PIC32MACTeardown(
const TCPIP_MAC_MODULE_CTRL* const stackData
);
Description
This function supports teardown of the PIC32 Ethernet MAC (opposite of setup). Used by tcpip_module_manager.
Preconditions
DRV_ETHMAC_PIC32MACSetup must have been called to setup the driver.
Parameters
Parameters Description
pStackData Pointer to Stack Data
Returns
TCPIP_MAC_RES_OK if initialization completed, error enumeration value otherwise.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-240
Remarks
This function deinitializes the Ethernet controller, the MAC and the associated PHY. It should be called to be able to schedule
any Ethernet transmit or receive operation.
Example
5.1.3.7.2 Get and Put Functions
5.1.3.7.3 Base Address and Buffer Size Functions
5.1.3.7.4 Receive Functions
5.1.3.7.4.1 DRV_ETHMAC_PIC32MACPacketRx Function
C
TCPIP_MAC_PACKET* DRV_ETHMAC_PIC32MACPacketRx(
TCPIP_MAC_HANDLE hMac,
TCPIP_MAC_RES* pRes,
const TCPIP_MAC_PACKET_RX_STAT** ppPktStat
);
Description
This is the MAC receive function.
Once a pending packet is available in the MAC driver internal RX queues this function will dequeue the packet and hand it over
to the MAC driver's client - i.e. the stack - for further processing.
The flags for a RX packet have to be updated by the MAC driver:
• TCPIP_MAC_PKT_FLAG_RX has to be set If the MAC supports it, it should set:
• TCPIP_MAC_PKT_FLAG_UNICAST has to be set if that packet is a unicast packet
• TCPIP_MAC_PKT_FLAG_BCAST has to be set if that packet is a broadcast packet
• TCPIP_MAC_PKT_FLAG_MCAST has to be set if that packet is a multicast packet
• TCPIP_MAC_PKT_FLAG_QUEUED has to be set
• TCPIP_MAC_PKT_FLAG_SPLIT has to be set if the packet has multiple data segments
Additional information about the packet is available by providing the pRes and ppPktStat fields.
Preconditions
DRV_ETHMAC_PIC32MACSetup() should have been called.
Parameters
Parameters Description
hMac Ethernet MAC client handle
pRes optional pointer to an address that will receive an additional result associated with
the operation. Can be 0 if not needed.
ppPktStat optional pointer to an address that will receive the received packet status. Note
that this pointer cannot be used once the packet acknowledgement function was
called. Can be 0 if not needed.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-241
Returns
a valid pointer to an available RX packet 0 if no packet pending/available
Remarks
The MAC driver dequeues and return to the caller just one single packet.
Once the higher level layers in the stack are done with processing the RX packet, they have to call the corresponding packet
acknowledgement function that tells the MAC driver that it can resume control of that packet.
Once the stack modules are done processing the RX packets and the acknowledge function is called the MAC driver will reuse
the RX packets.
The MAC driver may use the DRV_ETHMAC_PIC32MACProcess() for obtaining new RX packets if needed.
Example
5.1.3.7.4.2 DRV_ETHMAC_PIC32MACPacketTx Function
C
TCPIP_MAC_RES DRV_ETHMAC_PIC32MACPacketTx(
TCPIP_MAC_HANDLE hMac,
TCPIP_MAC_PACKET * ptrPacket
);
Description
This is the MAC transmit function. The MAC driver has to suport internal queueing! A packet is to be rejected only if it's not
properly formatted. Otherwise it has to be scheduled for transmission in an internal queue!
Once the packet is scheduled for transmission the MAC driver has to set the TCPIP_MAC_PKT_FLAG_QUEUED flag so that
the stack is aware that this packet is under processing cnd cannot be modified!
Once the packet is transmitted, the TCPIP_MAC_PKT_FLAG_QUEUED has to be cleared, the proper packet acknowledgement
result (ackRes) has to be set and the packet acknowledgement function (ackFunc) has to be called. It is implementation
dependant if all these steps are implemented as part of the ackFunc itself or as discrete steps.
Preconditions
DRV_ETHMAC_PIC32MACSetup() should have been called.
Parameters
Parameters Description
hMac Ethernet MAC client handle
ptrPacket pointer to a TCPIP_MAC_PACKET that's completely formatted and ready to be
transmitted over the network
Returns
TCPIP_MAC_RES_OK if the packet transmitted, TCPIP_MAC_RES errocode for not properly formatted packets, etc.
Example
5.1.3.7.5 Transmit Functions
5.1.3.7.5.1 DRV_ETHMAC_PIC32MACRxFilterHashTableEntrySet Function
C
TCPIP_MAC_RES DRV_ETHMAC_PIC32MACRxFilterHashTableEntrySet(
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-242
TCPIP_MAC_HANDLE hMac,
TCPIP_MAC_ADDR* DestMACAddr
);
Description
This function salculates a CRC-32 using polynomial 0x4C11DB7 and then, using bits 28 through 23 of the CRC, sets the
appropriate bit in the ETHHT0-ETHHT1 registers.
Preconditions
DRV_ETHMAC_PIC32MACSetup() should have been called.
Parameters
Parameters Description
hMac Ethernet MAC client handle
DestMACAddr 6-byte group destination MAC address to allow through the Hash Table Filter. If
DestMACAddr is set to '0000 0000 0000', the hash table will be cleared of all
entries and the filter will be disabled.
Returns
TCPIP_MAC_RES_OK if success, an eror code otherwise.
Remarks
Sets the appropriate bit in the ETHHT0/1 registers to allow packets sent to DestMACAddr to be received and enabled the Hash
Table receive filter
There is no way to individually unset destination MAC addresses from the hash table since it is possible to have a hash collision
and therefore multiple MAC addresses relying on the same hash table bit. The stack would have to individually store each 6 byte
MAC address to support this feature, which would waste a lot of RAM and be unnecessary in most applications. As a simple
compromise, you can call DRV_ETHMAC_PIC32MACRxFilterHashTableEntrySet() using a 00-00-00-00-00-00 destination MAC
address, which will clear the entire hash table and disable the hash table filter. This will allow you to then readd the necessary
destination addresses.
Example
5.1.3.7.6 Event Functions
5.1.3.7.6.1 DRV_ETHMAC_PIC32MACEventAcknowledge Function
C
bool DRV_ETHMAC_PIC32MACEventAcknowledge(
TCPIP_MAC_HANDLE hMac,
TCPIP_MAC_EVENT tcpAckEv
);
Description
This function acknowledges and re-enables processed events. Multiple events can be orr-ed together as they are processed
together. The events acknowledged by this function should be the events that have been retrieved from the stack by calling
DRV_ETHMAC_PIC32MACEventPendingGet() or have been passed to the user by the stack using the notification handler
(PIC32MACEventSetNotifyHandler()) and have been processed and have to be re-enabled.
Preconditions
DRV_ETHMAC_PIC32MACSetup() should have been called.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-243
Parameters
Parameters Description
hMac Ethernet MAC client handle
tcpAckEv the events that the user processed and need to be re-enabled
Returns
true if events acknowledged false if no events to be acknowledged
Remarks
All events should be acknowledged, in order to be re-enabled.
Some events are fatal errors and should not be acknowledged (TCPIP_MAC_EV_RX_BUSERR,
TCPIP_MAC_EV_TX_BUSERR). Stack re-initialization is needed under such circumstances.
Some events are just system/application behavior and they are intended only as simple info (TCPIP_MAC_EV_RX_OVFLOW,
TCPIP_MAC_EV_RX_BUFNA, TCPIP_MAC_EV_TX_ABORT, TCPIP_MAC_EV_RX_ACT).
The TCPIP_MAC_EV_RX_FWMARK and TCPIP_MAC_EV_RX_EWMARK events are part of the normal flow control operation
(if auto flow control was enabled). They should be enabled alternatively, if needed.
The events are persistent. They shouldn't be re-enabled unless they have been processed and the condition that generated
them was removed. Re-enabling them immediately without proper processing will have dramatic effects on system performance.
Example
DRV_ETHMAC_PIC32MACEventAcknowledge( hMac, stackNewEvents );
5.1.3.7.6.2 DRV_ETHMAC_PIC32MACEventMaskSet Function
C
bool DRV_ETHMAC_PIC32MACEventMaskSet(
TCPIP_MAC_HANDLE hMac,
TCPIP_MAC_EVENT macEvents,
bool enable
);
Description
This function sets the enabled events. Multiple events can be orr-ed together. All events that are set will be added to the
notification process. The old events will be disabled. The stack (or stack user) has to catch the events that are notified and
process them:
• The stack should process the TCPIP_MAC_EV_RX_PKTPEND/TCPIP_MAC_EV_RX_DONE, TCPIP_MAC_EV_TX_DONE
transfer events
• Process the specific condition and acknowledge them calling DRV_ETHMAC_PIC32MACEventAcknowledge() so that they
can be re-enabled.
Preconditions
DRV_ETHMAC_PIC32MACSetup() should have been called.
Parameters
Parameters Description
hMac Ethernet MAC client handle
macEvMask events the user of the stack wants to add/delete for notification
enable if true, the events will be enabled, else disabled
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-244
Returns
always true, operation succeeded.
Remarks
The event notification system enables the user of the TCPIP stack to call into the stack for processing only when there are
relevant events rather than being forced to periodically call from within a loop.
If the notification events are nill the interrupt processing will be disabled. Otherwise the event notification will be enabled and the
interrupts relating to the requested events will be enabled.
Note that once an event has been caught by the stack ISR (and reported if a notification handler is in place) it will be disabled
until the DRV_ETHMAC_PIC32MACEventAcknowledge() is called.
Example
DRV_ETHMAC_PIC32MACEventMaskSet( hMac, TCPIP_MAC_EV_RX_OVFLOW | TCPIP_MAC_EV_RX_BUFNA,
true );
5.1.3.7.6.3 DRV_ETHMAC_PIC32MACEventPendingGet Function
C
TCPIP_MAC_EVENT DRV_ETHMAC_PIC32MACEventPendingGet(
TCPIP_MAC_HANDLE hMac
);
Description
This function returns the currently pending events belonging to a group. Multiple events can be orr-ed together as they
accumulate. The stack should be called for processing whenever a stack managed event (TCPIP_MAC_EV_RX_PKTPEND,
TCPIP_MAC_EV_TX_DONE) is present. The other, non critical events, may not be managed by the stack and passed to an
user. They will have to be eventually acknowledged if re-enabling is needed.
Preconditions
DRV_ETHMAC_PIC32MACSetup should have been called.
Parameters
Parameters Description
hMac parameter identifying the intended MAC client
Returns
The currently stack pending events.
Remarks
This is the preferred method to get the current pending MAC events. The stack maintains a proper image of the events from their
occurrence to their acknowledgement.
Even with a notification handler in place it's better to use this function to get the current pending events rather than using the
events passed by the notification handler which could be stale.
The events are persistent. They shouldn't be re-enabled unless they have been processed and the condition that generated
them was removed. Re-enabling them immediately without proper processing will have dramatic effects on system performance.
The returned value is just a momentary value. The pending events can change any time.
Example
TCPIP_MAC_EVENT currEvents = DRV_ETHMAC_PIC32MACEventPendingGet( hMac);
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-245
5.1.3.7.7 Library Functions
5.1.3.7.8 Other Functions
5.1.3.7.8.1 DRV_ETHMAC_PIC32MACPowerMode Function
C
bool DRV_ETHMAC_PIC32MACPowerMode(
TCPIP_MAC_HANDLE hMac,
TCPIP_MAC_POWER_MODE pwrMode
);
Description
This function powers down the Ethernet MAC.
Preconditions
None.
Parameters
Parameters Description
hMac Ethernet MAC client handle
pwrMode Power Mode (?)
Returns
None.
Example
5.1.3.7.8.2 DRV_ETHMAC_PIC32MACProcess Function
C
TCPIP_MAC_RES DRV_ETHMAC_PIC32MACProcess(
TCPIP_MAC_HANDLE hMac
);
Description
This is a function that allows for internal processing by the MAC driver. It is meant for processing that cannot be done from within
ISR.
Some of the processing that this is intended for:
• the MAC driver can process its pending TX queues (although it should do that preferrably from within the TX ISR)
• RX buffers replenishing. If the number of packets in the RX queue falls below a specified limit, the MAC driver can use this
function to allocate some extra RX packets. Similarly, if there are too many allocated RX packets, the MAC driver can free
some of them.
Normally this function will be called in response to an TX and/or RX event signalled by the driver. This is specified by the MAC
driver at initialization time using TCPIP_MAC_MODULE_CTRL.
An alternative approach is that the MAC driver uses a system service to create a timer signal that will call the
TCPIP_MAC_Process on a periodic basis.
Preconditions
DRV_ETHMAC_PIC32MACSetup() should have been called.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-246
Parameters
Parameters Description
hMac Ethernet MAC client handle
Returns
TCPIP_MAC_RES_OK if all processing went on OK a TCPIP_MAC_RES error code if processing failed for some reason
Remarks
The MAC driver may use the DRV_ETHMAC_PIC32MACProcess() for obtaining new RX packets if needed.
Example
5.1.3.7.9 Data Types and Constants
5.1.3.7.9.1 ETH_CLOSE_FLAGS Enumeration
C
typedef enum {
ETH_CLOSE_GRACEFUL,
ETH_CLOSE_DEFAULT = (0)
} ETH_CLOSE_FLAGS;
Description
Ethernet Close Flags
This enumeration defines the close capabilities of the Ethernet module.
Members
Members Description
ETH_CLOSE_GRACEFUL Wait for the current TX/RX op to finish
ETH_CLOSE_DEFAULT = (0) Default close options
5.1.3.7.9.2 ETH_LINK_STATUS Enumeration
C
typedef enum {
ETH_LINK_ST_DOWN,
ETH_LINK_ST_UP,
ETH_LINK_ST_LP_NEG_UNABLE,
ETH_LINK_ST_REMOTE_FAULT,
ETH_LINK_ST_PDF,
ETH_LINK_ST_LP_PAUSE,
ETH_LINK_ST_LP_ASM_DIR,
ETH_LINK_ST_NEG_TMO,
ETH_LINK_ST_NEG_FATAL_ERR
} ETH_LINK_STATUS;
Description
Ethernet Link Status Codes
This enumeration defines the flags describing the status of the Ethernet link.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-247
Members
Members Description
ETH_LINK_ST_DOWN No connection to the LinkPartner
ETH_LINK_ST_UP Link is up
ETH_LINK_ST_LP_NEG_UNABLE LP non negotiation able
ETH_LINK_ST_REMOTE_FAULT LP fault during negotiation
ETH_LINK_ST_PDF Parallel Detection Fault encountered (when ETH_LINK_ST_LP_NEG_UNABLE)
ETH_LINK_ST_LP_PAUSE LP supports symmetric pause
ETH_LINK_ST_LP_ASM_DIR LP supports asymmetric TX/RX pause operation
ETH_LINK_ST_NEG_TMO LP not there
ETH_LINK_ST_NEG_FATAL_ERR An unexpected fatal error occurred during the negotiation
Remarks
Multiple flags can be set.
5.1.3.7.9.3 ETH_MODULE_STATUS Enumeration
C
typedef enum {
ETH_ST_RXBUSY,
ETH_ST_TXBUSY,
ETH_ST_BUSY
} ETH_MODULE_STATUS;
Description
Ethernet Controller Status Codes
This enumeration defines the flags describing the status of the Ethernet controller.
Members
Members Description
ETH_ST_RXBUSY A packet is currently received
ETH_ST_TXBUSY A packet is currently transmitted
ETH_ST_BUSY Module is on or completing a transaction
5.1.3.7.9.4 ETH_OPEN_FLAGS Enumeration
C
typedef enum {
ETH_OPEN_AUTO,
ETH_OPEN_FDUPLEX,
ETH_OPEN_HDUPLEX,
ETH_OPEN_100,
ETH_OPEN_10,
ETH_OPEN_HUGE_PKTS,
ETH_OPEN_MAC_LOOPBACK,
ETH_OPEN_PHY_LOOPBACK,
ETH_OPEN_MDIX_AUTO,
ETH_OPEN_MDIX_NORM,
ETH_OPEN_MDIX_SWAP,
ETH_OPEN_RMII,
ETH_OPEN_MII,
ETH_OPEN_DEFAULT = (ETH_OPEN_AUTO|ETH_OPEN_FDUPLEX|ETH_OPEN_HDUPLEX|
ETH_OPEN_100|ETH_OPEN_10|ETH_OPEN_MDIX_AUTO)
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-248
} ETH_OPEN_FLAGS;
Description
Ethernet Open Configuration Settings
This enumeration defines the various configuration options for the Ethernet module. These values can be ORed together to
create a configuration mask passed to the EthMACOpen routine.
Members
Members Description
ETH_OPEN_AUTO Use auto negotiation. set the following flags to specify
your choices
ETH_OPEN_FDUPLEX Use full duplex or full duplex negotiation capability
needed
ETH_OPEN_HDUPLEX Use half duplex or half duplex negotiation capability
needed
ETH_OPEN_100 Use 100MBps or 100MBps negotiation capability
needed
ETH_OPEN_10 Use 10MBps or 10MBps negotiation capability needed
ETH_OPEN_HUGE_PKTS Allow huge packets RX/TX
ETH_OPEN_MAC_LOOPBACK Loopbacked at the MAC level
ETH_OPEN_PHY_LOOPBACK When PHY is loopback-ed, negotiation will be disabled!
ETH_OPEN_MDIX_AUTO Use Auto MDIX
ETH_OPEN_MDIX_NORM Use normal MDIX when Auto MDIX disabled
ETH_OPEN_MDIX_SWAP Use swapped MDIX when Auto MDIX disabled
ETH_OPEN_RMII RMII connection
ETH_OPEN_MII MII connection
ETH_OPEN_DEFAULT =
(ETH_OPEN_AUTO|ETH_OPEN_FDUPLEX|ETH_OPEN_HDUPLEX|
ETH_OPEN_100|ETH_OPEN_10|ETH_OPEN_MDIX_AUTO)
All capabilities default
Remarks
When Auto-negotiation is specified:
• If multiple capability flags are set (ETH_OPEN_FDUPLEX, ETH_OPEN_HDUPLEX, ETH_OPEN_100, ETH_OPEN_10 ) they
are all advertised as this link side capabilities.
• If no setting is passed, the lowest one is taken, i.e., ETH_OPEN_HDUPLEX and ETH_OPEN_10.
• Auto-MDIX requires Auto-Negotiation; ETH_OPEN_MDIX_NORM or ETH_OPEN_MDIX_SWAP setting irrelevant.
When No Auto-negotiation is specified:
• If multiple settings, the highest priority setting is taken, i.e. ETH_OPEN_FDUPLEX over ETH_OPEN_HDUPLEX and
ETH_OPEN_100 over ETH_OPEN_10.
• If no setting, the lowest setting is taken, i.e., ETH_OPEN_HDUPLEX and ETH_OPEN_10.
• The MDIX is set based on the ETH_OPEN_MDIX_NORM/ETH_OPEN_MDIX_SWAP setting.
5.1.3.7.9.5 ETH_PAUSE_TYPE Enumeration
C
typedef enum {
ETH_MAC_PAUSE_TYPE_NONE,
ETH_MAC_PAUSE_TYPE_PAUSE,
ETH_MAC_PAUSE_TYPE_ASM_DIR,
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-249
ETH_MAC_PAUSE_TYPE_EN_TX,
ETH_MAC_PAUSE_TYPE_EN_RX,
ETH_MAC_PAUSE_ALL = (ETH_MAC_PAUSE_TYPE_PAUSE|ETH_MAC_PAUSE_TYPE_ASM_DIR|
ETH_MAC_PAUSE_TYPE_EN_TX|ETH_MAC_PAUSE_TYPE_EN_RX),
ETH_MAC_PAUSE_CPBL_MASK = ETH_MAC_PAUSE_ALL
} ETH_PAUSE_TYPE;
Description
Ethernet MAC Pause Types
This enumeration defines the pause capabilities of the Ethernet MAC.
Members
Members Description
ETH_MAC_PAUSE_TYPE_NONE No PAUSE capabilities
ETH_MAC_PAUSE_TYPE_PAUSE Supports symmetric PAUSE
ETH_MAC_PAUSE_TYPE_ASM_DIR Supports ASM_DIR
ETH_MAC_PAUSE_TYPE_EN_TX Enable MAC TX pause support
ETH_MAC_PAUSE_TYPE_EN_RX Enable MAC RX pause support
ETH_MAC_PAUSE_ALL =
(ETH_MAC_PAUSE_TYPE_PAUSE|ETH_MAC_PAUSE_TYPE_ASM_DIR|
ETH_MAC_PAUSE_TYPE_EN_TX|ETH_MAC_PAUSE_TYPE_EN_RX)
All types of pause
ETH_MAC_PAUSE_CPBL_MASK = ETH_MAC_PAUSE_ALL All pause capabilities our MAC supports
5.1.3.7.9.6 ETH_RESULT_CODE Enumeration
C
typedef enum {
ETH_RES_OK,
ETH_RES_NO_PACKET,
ETH_RES_PACKET_QUEUED,
ETH_RES_OUT_OF_MEMORY,
ETH_RES_NO_DESCRIPTORS,
ETH_RES_USPACE_ERR,
ETH_RES_RX_SIZE_ERR,
ETH_RES_RX_PKT_SPLIT_ERR,
ETH_RES_NEGOTIATION_UNABLE,
ETH_RES_NEGOTIATION_INACTIVE,
ETH_RES_NEGOTIATION_NOT_STARTED,
ETH_RES_NEGOTIATION_ACTIVE,
ETH_RES_NEGOTIATION_LINKDOWN,
ETH_RES_DTCT_ERR,
ETH_RES_CPBL_ERR,
ETH_RES_CFG_ERR
} ETH_RESULT_CODE;
Description
Ethernet Operation Result Codes
This enumeration defines the possible results of any of the Ethernet library operations that have the possibilty of failing. This
result should be checked to ensure that the operation achieved the desired result.
Members
Members Description
ETH_RES_OK Everything ok
ETH_RES_NO_PACKET No such packet exist
ETH_RES_PACKET_QUEUED Packet is queued (not transmitted or received and not processed)
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-250
ETH_RES_OUT_OF_MEMORY Some memory allocation failed
ETH_RES_NO_DESCRIPTORS Not enough descriptors available
ETH_RES_USPACE_ERR We don't support user space buffers.
ETH_RES_RX_SIZE_ERR The size of the receive buffers too small
ETH_RES_RX_PKT_SPLIT_ERR A received packet spans more buffers/descriptors than supplied
ETH_RES_NEGOTIATION_UNABLE No negotiation support
ETH_RES_NEGOTIATION_INACTIVE No negotiation active
ETH_RES_NEGOTIATION_NOT_STARTED Negotiation not started yet
ETH_RES_NEGOTIATION_ACTIVE Negotiation active
ETH_RES_NEGOTIATION_LINKDOWN Link down after negotiation, negotiation failed
ETH_RES_DTCT_ERR No Phy was detected or it failed to respond to reset command
ETH_RES_CPBL_ERR No match between the capabilities: the Phy supported and the open requested
ones
ETH_RES_CFG_ERR Hardware configuration doesn't match the requested open mode
5.1.3.7.9.7 ETHPHY_CONFIG_FLAGS Enumeration
C
typedef enum {
ETH_PHY_CFG_RMII,
ETH_PHY_CFG_MII,
ETH_PHY_CFG_ALTERNATE,
ETH_PHY_CFG_DEFAULT,
ETH_PHY_CFG_AUTO
} ETHPHY_CONFIG_FLAGS;
Description
flags for DRV_ETHPHY_Setup() call
Members
Members Description
ETH_PHY_CFG_RMII RMII data interface in configuration fuses.
ETH_PHY_CFG_MII MII data interface in configuration fuses.
ETH_PHY_CFG_ALTERNATE Configuration fuses is ALT
ETH_PHY_CFG_DEFAULT Configuration fuses is DEFAULT
ETH_PHY_CFG_AUTO Use the fuses configuration to detect if you are RMII/MII and ALT/DEFAULT
configuration
5.1.3.7.9.8 DRV_ETHMAC_INDEX_1 Macro
C
#define DRV_ETHMAC_INDEX_1 1
Description
This is macro DRV_ETHMAC_INDEX_1.
5.1.3.7.9.9 DRV_ETHPHY_INDEX_1 Macro
C
#define DRV_ETHPHY_INDEX_1 1
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-251
Description
This is macro DRV_ETHPHY_INDEX_1.
5.1.3.8 Files
Files
Name Description
drv_ethernet_flags.h Ethernet driver configuration flags file.
drv_ethmac.h Ethernet MAC device driver interface file.
drv_ethmac_config.h Ethernet MAC driver configuration definitions template.
Description
5.1.3.8.1 drv_ethernet_flags.h
Ethernet Drivers Configuration Flags
This file provides the definition of commonly-used configuration enumerations for use with the Ethernet PHY and Ethernet MAC
Drivers.
Enumerations
Name Description
ETH_CLOSE_FLAGS Defines the possible disable codes of Ethernet controller
"DRV_ETHMAC_LegacyClose" call.
ETH_LINK_STATUS Defines the possible status flags of Ethernet link.
ETH_OPEN_FLAGS Supported open configuration flags for the Ethernet module (EthMACOpen).
ETH_PAUSE_TYPE Defines the possible Ethernet MAC pause types.
ETH_RESULT_CODE Defines the possible results of Ethernet operations that can succeed or fail
ETHPHY_CONFIG_FLAGS flags for DRV_ETHPHY_Setup() call
Company
Microchip Technology Inc.
FileName: drv_ethernet_flags.h
5.1.3.8.2 drv_ethmac.h
Ethernet MAC Device Driver Interface
The Ethernet MAC device driver provides a simple interface to manage the Ethernet peripheral. This file defines the interface
definitions and prototypes for the Ethernet MAC driver.
Enumerations
Name Description
ETH_MODULE_STATUS Defines the possible status codes of the Ethernet controller.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-252
Functions
Name Description
DRV_ETHMAC_PIC32MACClose Closes a client instance of the PIC32 MAC Driver.
DRV_ETHMAC_PIC32MACEventAcknowledge This function acknowledges and re-enables processed
events. Multiple events can be orr-ed together as they are
processed together. The events acknowledged by this
function should be the events that have been retrieved
from the stack by calling
DRV_ETHMAC_PIC32MACEventPendingGet() or have
been passed to the user by the stack using the notification
handler (PIC32MACEventSetNotifyHandler()) and have
been processed and have to be re-enabled.
DRV_ETHMAC_PIC32MACEventMaskSet Enables the MAC events.
DRV_ETHMAC_PIC32MACEventPendingGet Returns the currently pending events.
DRV_ETHMAC_PIC32MACGetConfig Supports PIC32 Ethernet MAC by copying its
configuration..
DRV_ETHMAC_PIC32MACLinkCheck Checks current link status.
DRV_ETHMAC_PIC32MACOpen Opens a client instance of the PIC32 MAC Driver.
DRV_ETHMAC_PIC32MACPacketRx A packet is returned if such a pending packet exists.
DRV_ETHMAC_PIC32MACPacketTx A packet is submitted to the MAC driver for transmission.
DRV_ETHMAC_PIC32MACPowerMode Powers down the Ethernet MAC.
DRV_ETHMAC_PIC32MACProcess MAC periodic processing function.
DRV_ETHMAC_PIC32MACRxFilterHashTableEntrySet Calculates a CRC-32 and sets the approriate bit in the
ETHHTx registers
DRV_ETHMAC_PIC32MACSetup Supports PIC32 Ethernet MAC setup.
DRV_ETHMAC_PIC32MACTeardown Supports PIC32 Ethernet MAC Teardown (opposite of
setup).
Macros
Name Description
DRV_ETHMAC_INDEX_0 Ethernet driver index definitions.
DRV_ETHMAC_INDEX_1 This is macro DRV_ETHMAC_INDEX_1.
DRV_ETHMAC_INDEX_COUNT Number of valid Ethernet driver indices.
Company
Microchip Technology Inc.
FileName: drv_ethmac.h
5.1.3.8.3 drv_ethmac_config.h
ETHMAC Driver Configuration Definitions for the template version
These definitions statically define the driver's mode of operation.
Macros
Name Description
DRV_ETHMAC_CLIENTS_NUMBER Selects the maximum number of clients.
DRV_ETHMAC_INDEX Ethernet MAC static index selection.
5.1 Driver Library Help MPLAB Harmony Help Ethernet MAC Driver Library
5-253
DRV_ETHMAC_INSTANCES_NUMBER Selects the maximum number of hardware instances that can be
supported by the dynamic driver.
DRV_ETHMAC_INTERRUPT_MODE Controls operation of the driver in the interrupt or polled mode.
DRV_ETHMAC_INTERRUPT_SOURCE Defines an override of the interrupt source in case of static driver.
DRV_ETHMAC_PERIPHERAL_ID Defines an override of the peripheral ID.
DRV_ETHMAC_POWER_STATE Defines an override of the power state of the Ethernet MAC driver.
File Name
drv_ethmac_config.h
Company
Microchip Technology Inc.
5.1.4 Ethernet PHY Driver Library
5.1.4.1 Introduction
Ethernet PHY Driver Library
for
Microchip Microcontrollers
This library provides a low-level abstraction of the Ethernet PHY Driver Library that is available on the Microchip family of
microcontrollers with a convenient C language interface. It can be used to simplify low-level access to the module without the
necessity of interacting directly with the module's registers, there by hiding differences from one microcontroller variant to
another.
Description
This library provides a software abstraction for configuring external Ethernet PHY devices for use with the on-chip Ethernet
Controller.
5.1.4.2 Release Notes
MPLAB Harmony Version: v0.70b Ethernet PHY Driver Library Version : 7.10 Release Date: 18Nov2013
New This Release:
This is the first release of the library. The interface can change in the beta and\or 1.0 release.
Known Issues:
Nothing to report in this release.
5.1.4.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-254
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
5.1.4.4 Using the Library
This topic describes the basic architecture of the Ethernet PHY Driver Library and provides information and examples on how to
use it.
Interface Header File: drv_ethphy.h
The interface to the Ethernet PHY Driver Library is defined in the "drv_ethphy.h" header file. This file is included by the
"drv_ethphy.h" file. Any C language source (.c) file that uses the Ethernet PHY Driver Library should include "drv.h".
Library File:
The Ethernet PHY Driver Library archive (.a) file is installed with MPLAB Harmony.
Please refer to the MPLAB Harmony Overview for how the library interacts with the framework.
5.1.4.4.1 Abstraction Model
Overview
To understand how this library works you must first understand how an external Ethernet PHY interfaces with the Ethernet
Controller. As shown in Figure 1, the PHY has two interfaces, one for managing the PHY, known as the Serial Management
Interface (SMI), for configuring the device and a second, known as the Reduced Media Independent Interface (RMII), for transmit
and receive data.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-255
Figure 1: Typical External PHY Interface
The block diagram also shows an interrupt signal (nINT) going to a external interrupt pin on the host device and signals going to
on-board LEDs to show link state and link activity.
The SMI interface is also known as the MII Management (MIIM) interface. This control interface is standardized for all PHY's by
Clause 22 of the 802.3 standard. It provides up to 32 16-bit registers on the PHY. The table below provides a summary of all 32
registers. Consult the data sheet for the PHY device for the specific bit fields in each register.
Register
Address
Register Name Register Type
0 Control Basic
1 Status Basic
2,3 PHY Identifier Extended
4 Auto-Negotiation
Advertisement
Extended
5 Auto-Negotiation
Link Partner Base
Page Ability
Extended
6 Auto-Negotiation
Expansion
Extended
7 Auto-Negotiation
Next Page Transmit
Extended
8 Auto-Negotiation
Link Partner
Received Next
Page
Extended
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-256
9 MASTER-SLAVE
Control Register
Extended
10 MASTER-SLAVE
Status Register
Extended
11-14 Reserved Extended
15 Extended Status Reserved
16-31 Vendor Specific Extended
5.1.4.4.2 Library Overview
The Ethernet PHY Driver Library is divided into the following sections:
Library Interface Section Description
System Level Functions Routines that integrate the driver into the MPLAB Harmony system
Client Level Functions Open, Close, Link Status, Auto Negotiation
SMI/MIIM Functions SMI/MIIM Management Interface
External PHY Support Functions Provides the API for PHY support routines that the driver will call when
setting up the PHY.
The driver library provides support for 4 PHYs.
Other Functions Functions that provide software version information.
Data Types and Constants C language typedefs and enums used by this library.
5.1.4.4.3 MPLAB Harmony vs. the Unified TCP/IP Stack
The following is a cross-reference of MPLAB Harmony functions and the equivalent Unified TCP/IP Stack function:
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-257
MPLAB Harmony Function: Unified Stack Function:
DRV_ETHPHY_ClientStatus
DRV_ETHPHY_Close
DRV_ETHPHY_Deinitialize
DRV_ETHPHY_HWConfigFlagsGet
DRV_ETHPHY_Setup
DRV_ETHPHY_Initialize
DRV_ETHPHY_LinkScanRead
DRV_ETHPHY_LinkScanStart
DRV_ETHPHY_LinkScanStop
DRV_ETHPHY_LinkStatusGet
DRV_ETHPHY_NegotiationIsComplete
DRV_ETHPHY_NegotiationResultGet
DRV_ETHPHY_Open
DRV_ETHPHY_Reinitialize
DRV_ETHPHY_Reset
DRV_ETHPHY_RestartNegotiation
DRV_ETHPHY_SMIReadResultGet
DRV_ETHPHY_SMIReadStart
DRV_ETHPHY_SMIScanDataGet
DRV_ETHPHY_SMIScanStart
DRV_ETHPHY_SMIScanStatusGet
DRV_ETHPHY_SMIScanStop
DRV_ETHPHY_SMIWriteStart
DRV_ETHPHY_SMIisBusy
DRV_ETHPHY_Status
DRV_ETHPHY_Tasks
DRV_ETHPHY_VersionGet
DRV_ETHPHY_VersionStrGet
DRV_ETHPHY_SMIClockSet
-none-
-none-
-noneEthPhyGetHwConfigFlags
EthPhyInit
-noneEthPhyScanLinkRead
EthPhyScanLinkStart
EthPhyScanLinkStop
EthPhyGetLinkStatus
EthPhyNegotiationComplete
EthPhyGetNegotiationResult
-none-
-noneEthPhyReset
EthPhyRestartNegotiation
EthMIIMReadResult
EthMIIMReadStart
EthMIIMScanResult
EthMIIMScanStart
-none-
-noneEthMIIMWriteStart
-none-
-none-
-none-
-none-
-noneEthMIIMConfig
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-258
Unified Stack Function: MPLAB Harmony Function:
EthMIIMConfig
EthMIIMReadResult
EthMIIMReadStart
EthMIIMScanResult
EthMIIMScanStart
EthMIIMWriteStart
EthPhyGetHwConfigFlags
EthPhyGetLinkStatus
EthPhyGetNegotiationResult
EthPhyInit
EthPhyNegotiationComplete
EthPhyReset
EthPhyRestartNegotiation
EthPhyScanLinkRead
EthPhyScanLinkStart
EthPhyScanLinkStop
-none-
-none-
-none-
-none-
-none-
-none-
-none-
-none-
-none-
-none-
-none-
-none-
-noneDRV_ETHPHY_SMIClockSet
DRV_ETHPHY_SMIReadResultGet
DRV_ETHPHY_SMIReadStart
DRV_ETHPHY_SMIScanDataGet
DRV_ETHPHY_SMIScanStart
DRV_ETHPHY_SMIWriteStart
DRV_ETHPHY_HWConfigFlagsGet
DRV_ETHPHY_LinkStatusGet
DRV_ETHPHY_NegotiationResultGet
DRV_ETHPHY_Setup
DRV_ETHPHY_NegotiationIsComplete
DRV_ETHPHY_Reset
DRV_ETHPHY_RestartNegotiation
DRV_ETHPHY_LinkScanRead
DRV_ETHPHY_LinkScanStart
DRV_ETHPHY_LinkScanStop
DRV_ETHPHY_ClientStatus
DRV_ETHPHY_Close
DRV_ETHPHY_Deinitialize
DRV_ETHPHY_Initialize
DRV_ETHPHY_Open
DRV_ETHPHY_Reinitialize
DRV_ETHPHY_SMIScanStatusGet
DRV_ETHPHY_SMIScanStop
DRV_ETHPHY_SMIisBusy
DRV_ETHPHY_Status
DRV_ETHPHY_Tasks
DRV_ETHPHY_VersionGet
DRV_ETHPHY_VersionStrGet
5.1.4.5 Configuring the Library
Macros
Name Description
DRV_ETHPHY_CLIENTS_NUMBER Selects the miximum number of clients.
DRV_ETHPHY_INDEX Ethernet PHY static index selection.
DRV_ETHPHY_INDEX_0 Ethernet PHY driver index definitions.
DRV_ETHPHY_INDEX_COUNT Number of valid Ethernet PHY driver indices.
DRV_ETHPHY_INSTANCES_NUMBER Selects the maximum number of hardware instances that can be
supported by the dynamic driver.
DRV_ETHPHY_PERIPHERAL_ID Defines an override of the peripheral ID.
PHY_NEG_DONE_TMO negotiation complete timeout, ms. based on IEEE 802.3 Clause 28 Table
28-9 autoneg_wait_timer value (max 1s)
PHY_NEG_INIT_TMO negotiation initiation timeout, ms.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-259
PHY_RESET_CLR_TMO reset self clear timeout, ms. IEEE 802.3 Clause 22 Table 22-7 and
paragraph "22.2.4.1.1 Reset" (max 0.5s)
TCPIP_IF_PIC32INT We have an internal PIC32 MAC
Description
The configuration of the Ethernet MAC Driver Library is based on the file sys_config.h
This header file contains the configuration selection for the Ethernet MAC Driver Library. Based on the selections made, the
Ethernet MAC Driver Library will support or not support selected features. These configuration settings will apply to all instances
of the Ethernet MAC Driver Library.
This header can be placed anywhere; however, the path of this header needs to be present in the include search path for a
successful build. Refer to the Applications Overview section for more details.
5.1.4.5.1 DRV_ETHPHY_CLIENTS_NUMBER Macro
C
#define DRV_ETHPHY_CLIENTS_NUMBER 1
Description
Ethernet PHY Maximum Number of Clients
This definition select the maximum number of clients that the Ethernet PHY driver can support at run time. Not defining it means
using a single client.
Remarks
None.
5.1.4.5.2 DRV_ETHPHY_INDEX Macro
C
#define DRV_ETHPHY_INDEX DRV_ETHPHY_INDEX_1
Description
Ethernet PHY Static Index Selection
This definition selects the Ethernet PHY static index for the driver object reference.
Remarks
This index is required to make a reference to the driver object.
5.1.4.5.3 DRV_ETHPHY_INDEX_0 Macro
C
#define DRV_ETHPHY_INDEX_0 0
Description
Ethernet PHY Driver Module Index Numbers
These constants provide the Ethernet PHY driver index definitions.
Remarks
These constants should be used in place of hard-coded numeric literals.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-260
These values should be passed into the DRV_ETHPHY_Initialize and DRV_ETHPHY_Open routines to identify the driver
instance in use.
5.1.4.5.4 DRV_ETHPHY_INDEX_COUNT Macro
C
#define DRV_ETHPHY_INDEX_COUNT 1
Description
Ethernet PHY Driver Module Index Count
This constant identifies the number of valid Ethernet PHY driver indices.
Remarks
This constant should be used in place of hard-coded numeric literals.
This value is derived from part-specific header files defined as part of the peripheral libraries.
5.1.4.5.5 DRV_ETHPHY_INSTANCES_NUMBER Macro
C
#define DRV_ETHPHY_INSTANCES_NUMBER 1
Description
Ethernet PHY hardware instance configuration
This definition selects the maximum number of hardware instances that can be supported by the dynamic driver. Not defining it
means using a static driver.
Remarks
None.
5.1.4.5.6 DRV_ETHPHY_PERIPHERAL_ID Macro
C
#define DRV_ETHPHY_PERIPHERAL_ID ETHPHY_ID_1
Description
Ethernet PHY Peripheral ID Selection
Defines an override of the peripheral ID, using macros.
Remarks
Some devices also support ETHPHY_ID_0
5.1.4.5.7 PHY_NEG_DONE_TMO Macro
C
#define PHY_NEG_DONE_TMO 2000 // negotiation complete timeout, ms.
Description
negotiation complete timeout, ms. based on IEEE 802.3 Clause 28 Table 28-9 autoneg_wait_timer value (max 1s)
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-261
5.1.4.5.8 PHY_NEG_INIT_TMO Macro
C
#define PHY_NEG_INIT_TMO 1 // negotiation initiation timeout, ms.
Description
negotiation initiation timeout, ms.
5.1.4.5.9 PHY_RESET_CLR_TMO Macro
C
#define PHY_RESET_CLR_TMO 500 // reset self clear timeout, ms.
Description
reset self clear timeout, ms. IEEE 802.3 Clause 22 Table 22-7 and paragraph "22.2.4.1.1 Reset" (max 0.5s)
5.1.4.5.10 TCPIP_IF_PIC32INT Macro
C
#define TCPIP_IF_PIC32INT
Description
We have an internal PIC32 MAC
5.1.4.6 Building the Library
This section list the files that are available in the \src of the Ethernet PHY Driver. It lists which files need to be included in the
build based on either a hardware feature present on the board or configuration option selected by the system.
5.1.4.7 Library Interface
Data Types and Constants
Name Description
DRV_ETHPHY_CLIENT_STATUS Identifies the client-specific status of the Ethernet PHY driver.
DRV_ETHPHY_INIT Contains all the data necessary to initialize the Ethernet PHY device.
SMI_SCAN_DATA_STATUS Returns the status of the SMI of the Ethernet PHY.
SYS_OBJ_HANDLE_INVALID This is macro SYS_OBJ_HANDLE_INVALID.
SYS_OBJ_HANDLE_STATIC This is macro SYS_OBJ_HANDLE_STATIC.
SYS_OBJ_HANDLE SYS_MODULE_OBJ is badly named. It should be
SYS_MODULE_OBJ_HANDLE or something shorter. For brevity, it is renamed
to SYS_OBJ_HANDLE.
Client Level Functions
Name Description
DRV_ETHPHY_ClientStatus Gets the current client-specific status the Ethernet PHY driver.
DRV_ETHPHY_Close Closes an opened instance of the Ethernet PHY driver.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-262
DRV_ETHPHY_HWConfigFlagsGet Returns the current Ethernet PHY hardware MII/RMII and
ALTERNATE/DEFAULT configuration flags.
DRV_ETHPHY_LinkScanRead Returns current link status.
DRV_ETHPHY_LinkScanStart Starts an SMI scan of the link status.
DRV_ETHPHY_LinkScanStop Stops the SMI scan of the link status.
DRV_ETHPHY_LinkStatusGet Returns the current link status.
DRV_ETHPHY_NegotiationIsComplete Returns the results of a previously initiated Ethernet PHY negotiation.
DRV_ETHPHY_NegotiationResultGet Returns the link status after a completed negotiation.
DRV_ETHPHY_Open Opens the specified Ethernet PHY driver instance and returns a handle to
it.
DRV_ETHPHY_Reset Immediately resets the Ethernet PHY.
DRV_ETHPHY_RestartNegotiation Restarts auto-negotiation of the Ethernet PHY link.
DRV_ETHPHY_Setup Initializes Ethernet PHY communication.
External PHY Support Functions
Name Description
EXTPHY_MDIXCONFIGURE Configures the MDIX mode for the Ethernet PHY.
EXTPHY_MIICONFIGURE Configures the Ethernet PHY in one of the MII/RMII operation modes.
EXTPHY_SMIADDRESSGET Returns the SMI/MIIM address of the Ethernet PHY.
EXTPHY_SMICLOCKGET Returns the SMI/MIIM maximum clock speed in Hz of the Ethernet PHY.
Other Functions
Name Description
DRV_ETHPHY_VersionGet Gets the Ethernet PHY driver version in numerical format.
DRV_ETHPHY_VersionStrGet Gets the Ethernet PHY driver version in string format.
SMI/MIIM Functions
Name Description
DRV_ETHPHY_SMIClockSet Sets the SMI/MIIM interface clock.
DRV_ETHPHY_SMIisBusy Returns a boolean 'true' if the SMI/MIIM interface is busy with a transaction.
DRV_ETHPHY_SMIReadResultGet Gets the result of the SMI/MIIM register read.
DRV_ETHPHY_SMIReadStart Initiates SMI/MIIM read transaction.
DRV_ETHPHY_SMIScanDataGet Gets the latest SMI/MIIM scan data result.
DRV_ETHPHY_SMIScanStart Starts the scan of the SMI/MIIM register.
DRV_ETHPHY_SMIScanStatusGet Gets the status of the SMI/MIIM scan data.
DRV_ETHPHY_SMIScanStop Stops the scan of the SMI/MIIM register.
DRV_ETHPHY_SMIWriteStart Initiates a SMI/MIIM write transaction.
System Level Functions
Name Description
DRV_ETHPHY_Deinitialize Deinitializes the specified instance of the Ethernet PHY driver module.
DRV_ETHPHY_Initialize Initializes the Ethernet PHY driver.
DRV_ETHPHY_Reinitialize Reinitializes the driver and refreshes any associated hardware settings.
DRV_ETHPHY_Status Provides the current status of the Ethernet PHY driver module.
DRV_ETHPHY_Tasks Maintains the driver's state machine and implements its ISR.
Description
This section describes the Application Programming Interface (API) functions of the Ethernet PHY Driver Library.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-263
Refer to each section for a detailed description.
5.1.4.7.1 System Level Functions
5.1.4.7.1.1 DRV_ETHPHY_Deinitialize Function
C
void DRV_ETHPHY_Deinitialize(
SYS_OBJ_HANDLE object
);
Description
This function deinitializes the specified instance of the Ethernet PHY driver module, disabling its operation (and any hardware)
and invalidates all of the internal data.
Preconditions
The DRV_ETHPHY_Initialize function must have been called before calling this routine and a valid SYS_OBJ_HANDLE must
have been returned.
Parameters
Parameters Description
object Driver object handle, returned from DRV_ETHPHY_Initialize
Returns
None.
Remarks
Once the Initialize operation has been called, the Deinitialize operation must be called before the Initialize operation can be
called again.
Example
SYS_OBJ_HANDLE object; // Returned from DRV_ETHPHY_Initialize
SYS_STATUS status;
DRV_ETHPHY_Deinitialize(object);
status = DRV_ETHPHY_Status(object);
if (SYS_MODULE_DEINITIALIZED == status)
{
// Check again later if you need to know
// when the driver is deinitialized.
}
5.1.4.7.1.2 DRV_ETHPHY_Initialize Function
C
SYS_OBJ_HANDLE DRV_ETHPHY_Initialize(
const SYS_MODULE_INDEX index,
const SYS_MODULE_INIT * const init
);
Description
This function initializes the Ethernet PHY driver, making it ready for clients to open and use it.
Preconditions
None.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-264
Parameters
Parameters Description
drvIndex Index for the driver instance to be initialized
init Pointer to a data structure containing any data necessary to initialize the driver.
This pointer may be null if no data is required because static overrides have been
provided.
Returns
If successful, returns a valid handle to a driver object. Otherwise, it returns SYS_OBJ_HANDLE_INVALID. The returned object
must be passed as argument to DRV_ETHPHY_Reinitialize, DRV_ETHPHY_Deinitialize, DRV_ETHPHY_Tasks and
DRV_ETHPHY_Status routines.
Remarks
This function must be called before any other Ethernet PHY routine is called.
This function should only be called once during system initialization unless DRV_ETHPHY_Deinitialize is called to de-initialize
the driver instance.
Example
DRV_ETHPHY_INIT init;
SYS_OBJ_HANDLE objectHandle;
// Populate the Ethernet PHY initialization structure
init.phyId = ETHPHY_ID_0;
// Populate the Ethernet PHY initialization structure
init.phyId = ETHPHY_ID_2;
init.sExtPHYFunctions.MyPHYMIIConfigure = &SMSC8720_MIIConfigure;
init.sExtPHYFunctions.MyPHYMDIXConfigure = &SMSC8720_MDIXConfiguret;
init.sExtPHYFunctions.MyPHYSMIAddressGet = &SMSC8720_SMIAddressGet;
init.sExtPHYFunctions.MyPHYSMIClockGet = &SMSC8720_SMIClockGet;
// Do something
objectHandle = DRV_ETHPHY_Initialize(DRV_ETHPHY_INDEX_0, (SYS_MODULE_INIT*)&init);
if (SYS_OBJ_HANDLE_INVALID == objectHandle)
{
// Handle error
}
5.1.4.7.1.3 DRV_ETHPHY_Reinitialize Function
C
void DRV_ETHPHY_Reinitialize(
SYS_OBJ_HANDLE object,
const SYS_MODULE_INIT * const init
);
Description
This function reinitializes the driver and refreshes any associated hardware settings using the initialization data given, but it will
not interrupt any ongoing operations.
Preconditions
The DRV_ETHPHY_Initialize function must have been called before calling this routine and a valid SYS_OBJ_HANDLE must
have been returned.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-265
Parameters
Parameters Description
object Driver object handle, returned from the DRV_ETHPHY_Initialize routine
init Pointer to the initialization data structure
Returns
None.
Remarks
This function can be called multiple times to reinitialize the module.
This operation can be used to refresh any supported hardware registers as specified by the initialization data or to change the
power state of the module.
Example
DRV_ETHPHY_INIT init;
SYS_OBJ_HANDLE objectHandle;
// Populate the Ethernet PHY initialization structure
init.phyId = ETHPHY_ID_2;
init.sExtPHYFunctions.MyPHYMIIConfigure = &SMSC8720_MIIConfigure;
init.sExtPHYFunctions.MyPHYMDIXConfigure = &SMSC8720_MDIXConfiguret;
init.sExtPHYFunctions.MyPHYSMIAddressGet = &SMSC8720_SMIAddressGet;
init.sExtPHYFunctions.MyPHYSMIClockGet = &SMSC8720_SMIClockGet;
DRV_ETHPHY_Reinitialize(objectHandle, (SYS_MODULE_INIT*)&init);
phyStatus = DRV_ETHPHY_Status(objectHandle);
if (SYS_STATUS_BUSY == phyStatus)
{
// Check again later to ensure the driver is ready
}
else if (SYS_STATUS_ERROR >= phyStatus)
{
// Handle error
}
5.1.4.7.1.4 DRV_ETHPHY_Status Function
C
SYS_STATUS DRV_ETHPHY_Status(
SYS_OBJ_HANDLE object
);
Description
This function provides the current status of the Ethernet PHY driver module.
Preconditions
The DRV_ETHPHY_Initialize function must have been called before calling this function.
Parameters
Parameters Description
object Driver object handle, returned from DRV_ETHPHY_Initialize
Returns
SYS_STATUS_READY - Indicates that the driver is busy with a previous system level operation and cannot start another
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-266
Remarks
Any value greater than SYS_STATUS_READY is also a normal running state in which the driver is ready to accept new
operations.
SYS_STATUS_BUSY - Indicates that the driver is busy with a previous system level operation and cannot start another
SYS_STATUS_ERROR - Indicates that the driver is in an error state
Any value less than SYS_STATUS_ERROR is also an error state.
SYS_MODULE_DEINITIALIZED - Indicates that the driver has been de-initialized
This value is less than SYS_STATUS_ERROR.
The this operation can be used to determine when any of the driver's module level operations has completed.
If the status operation returns SYS_STATUS_BUSY, the a previous operation has not yet completed. Once the status operation
returns SYS_STATUS_READY, any previous operations have completed.
The value of SYS_STATUS_ERROR is negative (-1). Any value less than that is also an error state.
This function will NEVER block waiting for hardware.
If the Status operation returns an error value, the error may be cleared by calling the reinitialize operation. If that fails, the
deinitialize operation will need to be called, followed by the initialize operation to return to normal operations.
Example
SYS_OBJ_HANDLE object; // Returned from DRV_ETHPHY_Initialize
SYS_STATUS status;
status = DRV_ETHPHY_Status(object);
else if (SYS_STATUS_ERROR >= status)
{
// Handle error
}
5.1.4.7.1.5 DRV_ETHPHY_Tasks Function
C
void DRV_ETHPHY_Tasks(
SYS_OBJ_HANDLE object
);
Description
This function is used to maintain the driver's internal state machine and implement its ISR for interrupt-driven implementations.
Preconditions
The DRV_ETHPHY_Initialize routine must have been called for the specified Ethernet PHY driver instance.
Parameters
Parameters Description
object Object handle for the specified driver instance (returned from
DRV_ETHPHY_Initialize)
Returns
None
Remarks
This function is normally not called directly by an application. It is called by the system's Tasks routine (SYS_Tasks) or by the
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-267
apropriate raw ISR.
This function may excute in an ISR context and will never block or access any resources that may cause it to block.
Example
SYS_OBJ_HANDLE object; // Returned from DRV_ETHPHY_Initialize
while (true)
{
DRV_ETHPHY_Tasks (object);
// Do other tasks
}
5.1.4.7.2 Client Level Functions
5.1.4.7.2.1 DRV_ETHPHY_ClientStatus Function
C
DRV_ETHPHY_CLIENT_STATUS DRV_ETHPHY_ClientStatus(
DRV_HANDLE handle
);
Description
This function gets the client-specfic status of the Ethernet PHY driver associated with the given handle.
Preconditions
The DRV_ETHPHY_Initialize routine must have been called.
DRV_ETHPHY_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open routine
Returns
A DRV_ETHPHY_CLIENT_STATUS value describing the current status of the driver.
Remarks
This function will not block for hardware access and will immediately return the current status.
Example
DRV_HANDLE phyHandle; // Returned from DRV_ETHPHY_Open
DRV_ETHPHY_CLIENT_STATUS phyClientStatus;
phyClientStatus = DRV_ETHPHY_ClientStatus(phyHandle);
if(DRV_ETHPHY_CLIENT_STATUS_ERROR >= phyClientStatus)
{
// Handle the error
}
5.1.4.7.2.2 DRV_ETHPHY_Close Function
C
void DRV_ETHPHY_Close(
DRV_HANDLE handle
);
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-268
Description
This function closes an opened instance of the Ethernet PHY driver, invalidating the handle.
Preconditions
The DRV_ETHPHY_Initialize routine must have been called for the specified Ethernet PHY driver instance.
DRV_ETHPHY_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters Description
handle A valid open instance handle, returned from the driver's open routine
Returns
None
Remarks
After calling this routine, the handle passed in "handle" must not be used with any of the remaining driver routines. A new handle
must be obtained by calling DRV_ETHPHY_Open before the caller may use the driver again.
If DRV_IO_INTENT_BLOCKING was requested and the driver was built appropriately to support blocking behavior call may
block until the operation is complete.
If DRV_IO_INTENT_NON_BLOCKING request the driver client can call the DRV_ETHPHY_Status operation to find out when
the module is in the ready state (the handle is no longer valid).
Usually there is no need for the driver client to verify that the Close operation has completed.
Example
DRV_HANDLE handle; // Returned from DRV_ETHPHY_Open
DRV_ETHPHY_Close(handle);
5.1.4.7.2.3 DRV_ETHPHY_HWConfigFlagsGet Function
C
ETHPHY_CONFIG_FLAGS DRV_ETHPHY_HWConfigFlagsGet(
DRV_HANDLE handle
);
Description
This function returns the current Ethernet PHY hardware MII/RMII and ALTERNATE/DEFAULT configuration flags from the
Device Configuration Fuse bits.
Preconditions
None.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
Ethernet PHY configuration flag, see ETHPHY_CONFIG_FLAGS enumeration for bit values.
Remarks
Please note,
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-269
• ETHPHY_CONFIG_FLAGS DRV_ETHPHY_HWConfigFlagsGet( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• eEthPhyCfgFlags EthPhyGetHwConfigFlags(void)
Example
5.1.4.7.2.4 DRV_ETHPHY_LinkScanRead Function
C
ETH_LINK_STATUS DRV_ETHPHY_LinkScanRead(
DRV_HANDLE handle
);
Description
This function returns the current link status.
Preconditions
DRV_ETHPHY_LinkScanStart must be called first.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
Current link status, see ETH_LINK_STATUS enumeration.
Remarks
See also DRV_ETHPHY_LinkStatusGet.
Please note,
• ETH_LINK_STATUS DRV_ETHPHY_LinkScanRead( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• eEthLinkStat EthPhyScanLinkRead(void)
Example
5.1.4.7.2.5 DRV_ETHPHY_LinkScanStart Function
C
void DRV_ETHPHY_LinkScanStart(
DRV_HANDLE handle
);
Description
This function starts an SMI scan of the link status.
Preconditions
Communication with the Ethernet PHY was already established.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-270
Returns
None.
Remarks
This function starts an SMII scan of the Ethernet PHY link status register. It is a more efficient way of having access to the
current link status, since the normal SMI frame read operation is slow.
Please note,
• void DRV_ETHPHY_LinkScanStart( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• void EthPhyScanLinkStart(void)
Example
5.1.4.7.2.6 DRV_ETHPHY_LinkScanStop Function
C
void DRV_ETHPHY_LinkScanStop(
DRV_HANDLE handle
);
Description
This function stops the SMI scan of the ink status.
Preconditions
Communication with the Ethernet PHY was already established.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
None.
Remarks
Please note,
• void DRV_ETHPHY_LinkScanStop( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• void EthPhyScanLinkStop(void)
Example
5.1.4.7.2.7 DRV_ETHPHY_LinkStatusGet Function
C
ETH_LINK_STATUS DRV_ETHPHY_LinkStatusGet(
DRV_HANDLE handle,
bool refresh
);
Description
This function returns the urrent link status.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-271
Preconditions
DRV_ETHPHY_Setup should have been called.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
refresh Boolean flag, true to specify that a double read is needed
Returns
Current link status, see ETH_LINK_STATUS enumeration.
Remarks
This function reads the Ethernet PHY to get current link status If refresh is specified then, if the link is down a second read will be
performed to return the current link status.
Please note,
• ETH_LINK_STATUS DRV_ETHPHY_LinkStatusGet( DRV_HANDLE handle, bool refresh )
replaces the legacy "Ethernet Controller Library" function:
• eEthLinkStat EthPhyGetLinkStatus(int refresh)
Example
5.1.4.7.2.8 DRV_ETHPHY_NegotiationIsComplete Function
C
ETH_RESULT_CODE DRV_ETHPHY_NegotiationIsComplete(
DRV_HANDLE handle,
bool waitComplete
);
Description
This function returns the results of a previously initiated Ethernet PHY negotiation.
Preconditions
DRV_ETHPHY_Setup (and DRV_ETHPHY_RestartNegotiation) should have been called.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
waitComplete Boolean flag, true if wait for completion is required
Returns
ETH_RES_OK if negotiation is done, ETH_RES_NEGOTIATION_INACTIVE if no negotiation in progress,
ETH_RES_NEGOTIATION_NOT_STARTED if negotiation not yet started yet (means tmo if waitComplete was requested), or
ETH_RES_NEGOTIATION_ACTIVE if negotiation ongoing (means tmo if waitComplete was requested).
Remarks
See also DRV_ETHPHY_NegotiationResultGet.
Please note,
• ETH_RESULT_CODE DRV_ETHPHY_NegotiationIsComplete( DRV_HANDLE handle, bool waitComplete )
replaces the legacy "Ethernet Controller Library" function:
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-272
• eEthRes EthPhyNegotiationComplete(int waitComplete)
Example
5.1.4.7.2.9 DRV_ETHPHY_NegotiationResultGet Function
C
ETH_LINK_STATUS DRV_ETHPHY_NegotiationResultGet(
DRV_HANDLE handle,
ETH_OPEN_FLAGS* pFlags,
ETH_PAUSE_TYPE* pPauseType
);
Description
This function returns the link status after a completed negotiation.
Preconditions
DRV_ETHPHY_Setup, DRV_ETHPHY_RestartNegotiation, and DRV_ETHPHY_NegotiationIsComplete should have been called.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
pFlags Address to store the negotiation result
pPauseType Address to store the pause type supported by the link partner
Returns
Link status after the (completed) negotiation, see ETH_LINK_STATUS enumeration.
Remarks
If no negotiation possible/active/failed, most likely the flags are invalid!
Please note,
• ETH_LINK_STATUS DRV_ETHPHY_NegotiationResultGet( DRV_HANDLE handle, ETH_OPEN_FLAGS* pFlags,
ETH_PAUSE_TYPE* pPauseType )
replaces the legacy "Ethernet Controller Library" function:
• eEthLinkStat EthPhyGetNegotiationResult(eEthOpenFlags* pFlags, eEthMacPauseType* pPauseType)
Example
5.1.4.7.2.10 DRV_ETHPHY_Open Function
C
DRV_HANDLE DRV_ETHPHY_Open(
const SYS_MODULE_INDEX drvIndex,
const DRV_IO_INTENT intent
);
Description
This function opens the specified Ethernet PHY driver instance and provides a handle that must be provided to all other
client-level operations to identify the caller and the instance of the driver.
Preconditions
The DRV_ETHPHY_Initialize function must have been called before calling this function.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-273
Parameters
Parameters Description
drvIndex Identifier for the object instance to be opened
intent Zero or more of the values from the enumeration DRV_IO_INTENT ORed together
to indicate the intended use of the driver
Returns
If successful, the routine returns a valid open-instance handle (a number identifying both the caller and the module instance).
If an error occurs, the return value is DRV_HANDLE_INVALID.
Remarks
The handle returned is valid until the DRV_ETHPHY_Close routine is called.
This function will NEVER block waiting for hardware.
If the DRV_IO_INTENT_BLOCKING is requested and the driver was built appropriately to support blocking behavior, other
client-level operations may block waiting on hardware until they are complete.
If DRV_IO_INTENT_NON_BLOCKING is requested the driver client can call the DRV_ETHPHY_ClientStatus operation to find
out when the module is in the ready state.
If the requested intent flags are not supported, the function will return DRV_HANDLE_INVALID.
Example
DRV_HANDLE handle;
handle = DRV_ETHPHY_Open(DRV_ETHPHY_INDEX_0, DRV_IO_INTENT_EXCLUSIVE);
if (DRV_HANDLE_INVALID == handle)
{
// Unable to open the driver
}
5.1.4.7.2.11 DRV_ETHPHY_Reset Function
C
bool DRV_ETHPHY_Reset(
DRV_HANDLE handle,
bool waitComplete
);
Description
This function immediately resets the Ethernet PHY, optionally waiting for a reset to complete.
Preconditions
Communication with the Ethernet PHY was already established.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
waitComplete boolean flag, if true the procedure will wait for reset to complete
Returns
True - If PHY reset procedure completed (or completion not required) False - Otherwise
Remarks
Please note,
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-274
• bool DRV_ETHPHY_Reset( DRV_HANDLE handle, bool waitComplete )
replaces the legacy "Ethernet Controller Library" function:
• int EthPhyReset(int waitComplete)
Example
5.1.4.7.2.12 DRV_ETHPHY_RestartNegotiation Function
C
void DRV_ETHPHY_RestartNegotiation(
DRV_HANDLE handle
);
Description
This function restarts auto-negotiation of the Ethernet PHY link.
Preconditions
The Ethernet PHY should have been initialized with the proper duplex/speed mode.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
None.
Remarks
Please note,
• void DRV_ETHPHY_RestartNegotiation( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• eEthRes EthPhyRestartNegotiation(void)
Example
5.1.4.7.2.13 DRV_ETHPHY_Setup Function
C
ETH_RESULT_CODE DRV_ETHPHY_Setup(
DRV_HANDLE handle,
ETH_OPEN_FLAGS oFlags,
ETHPHY_CONFIG_FLAGS cFlags,
ETH_OPEN_FLAGS * pResFlags
);
Description
This function initializes the Ethernet PHY communication. It tries to detect the external Ethernet PHY, to read the capabilties and
find a match with the requested features.Then it programs the Ethernet PHY accordingly.
Preconditions
DRV_ETHMAC_LegacyInit should have been called to initialize the Ethernet MAC.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-275
Parameters
Parameters Description
handle A valid open-instance handle, returned from the driver's open routine
oFlags The requested open flags
cFlags Ethernet PHY MII/RMII configuration flags
pResFlags Address to store the initialization results
Returns
ETH_RES_OK for success; otherwise, an error code.
Remarks
Please note,
• ETH_RESULT_CODE DRV_ETHPHY_Setup( DRV_HANDLE handle, ETH_OPEN_FLAGS oFlags,
ETHPHY_CONFIG_FLAGS cFlags, ETH_OPEN_FLAGS* pResFlags )
replaces the legacy "Ethernet Controller Library" function:
• eEthRes EthPhyInit(eEthOpenFlags oFlags, eEthPhyCfgFlags cFlags, eEthOpenFlags* pResFlags)
Example
5.1.4.7.3 SMI/MIIM Functions
5.1.4.7.3.1 DRV_ETHPHY_SMIClockSet Function
C
void DRV_ETHPHY_SMIClockSet(
DRV_HANDLE handle,
uint32_t hostClock,
uint32_t maxSMIClock
);
Description
This function sets SMI/MIIM interface clock base on host clock and maximum supported SMI/MIIM interface clock speed.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
hostClock Host clock speed in Hz
maxSMIClock Maximum supported SMI/MIIM clock speed in Hz
Returns
None.
Remarks
Please note,
• void DRV_ETHPHY_SMIClockSet( DRV_HANDLE handle, uint16_t hostClock, uint16_t maxSMIClock )
replaces the legacy "Ethernet Controller Library" function:
• void EthMIIMConfig(unsigned int hostClock, unsigned int miimClock)
Example
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-276
5.1.4.7.3.2 DRV_ETHPHY_SMIisBusy Function
C
bool DRV_ETHPHY_SMIisBusy(
DRV_HANDLE handle
);
Description
This function returns a boolean 'true' if the SMI/MIIM interface is busy with a transaction.
Preconditions
MyPHYSMIClockSet() called to setup SMI/MIIM clock.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
• true - If the SMI/MIIM is busy
• false - If the SMI/MIIM is not busy
Example
5.1.4.7.3.3 DRV_ETHPHY_SMIReadResultGet Function
C
uint16_t DRV_ETHPHY_SMIReadResultGet(
DRV_HANDLE handle
);
Description
This function gets the result of the SMI/MIIM register read.
Preconditions
MyPHYSMIClockSet was called to set up the SMI/MIIM clock and DRV_ETHPHY_SMIReadStart was called to initiate a
SMI/MIIM register read. DRV_ETHPHY_SMIisBusy should return false.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
Result of the SMI/MIIM register read previously scheduled.
Remarks
Please note,
• uint16_t DRV_ETHPHY_SMIReadResultGet( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• unsigned short EthMIIMReadResult ( void )
Example
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-277
5.1.4.7.3.4 DRV_ETHPHY_SMIReadStart Function
C
void DRV_ETHPHY_SMIReadStart(
DRV_HANDLE handle,
unsigned int rIx,
unsigned int phyAdd
);
Description
This function initiates SMI/MIIM read transaction for a given PHY address and register.
Preconditions
MyPHYSMIClockSet was called to set up the SMI/MIIM clock.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
rIx PHY register to be accessed
phyAdd Address of PHY to be accessed
Returns
None.
Remarks
Please note,
• void DRV_ETHPHY_SMIReadStart( DRV_HANDLE handle, unsigned int rIx, unsigned int phyAdd )
replaces the legacy "Ethernet Controller Library" function:
• void EthMIIMReadStart(unsigned int rIx, unsigned int phyAdd)
Example
5.1.4.7.3.5 DRV_ETHPHY_SMIScanDataGet Function
C
uint16_t DRV_ETHPHY_SMIScanDataGet(
DRV_HANDLE handle
);
Description
This functino gets the latest SMI/MIIM scan data result.
Preconditions
DRV_ETHPHY_SMIScanStart() has been called. DRV_ETHPHY_SMIScanStatusGet() should return SMI_SCAN_DATA_VALID.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
Current scan result.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-278
Remarks
Scan data status must be SMI_SCAN_DATA_VALID.
Please note,
• uint16_t DRV_ETHPHY_SMIScanDataGet( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• unsigned short EthMIIMScanResult(void)
Example
5.1.4.7.3.6 DRV_ETHPHY_SMIScanStart Function
C
void DRV_ETHPHY_SMIScanStart(
DRV_HANDLE handle,
unsigned int rIx,
unsigned int phyAdd
);
Description
This function starts the scan of the SMI/MIIM register.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
rIx PHY register to be accessed, 0-31
phyAdd PHY address, 0-31
Returns
None.
Remarks
Please note,
• void DRV_ETHPHY_SMIScanStart( DRV_HANDLE handle, unsigned int rIx, unsigned int phyAdd )
replaces the legacy "Ethernet Controller Library" function:
• void EthMIIMScanStart(unsigned int rIx, unsigned int phyAdd)
Example
5.1.4.7.3.7 DRV_ETHPHY_SMIScanStatusGet Function
C
SMI_SCAN_DATA_STATUS DRV_ETHPHY_SMIScanStatusGet(
DRV_HANDLE handle
);
Description
This function gets the status of the SMI/MIIM scan data.
Preconditions
DRV_ETHPHY_SMIScanStart() has been called.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-279
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
SMI_SCAN_DATA_NOTVALID or SMI_SCAN_DATA_VALID
Remarks
None.
Example
5.1.4.7.3.8 DRV_ETHPHY_SMIScanStop Function
C
void DRV_ETHPHY_SMIScanStop(
DRV_HANDLE handle
);
Description
This function stops the scan of the SMI/MIIM register.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
Returns
None.
Remarks
Stops a scan transaction on the SMI interface.
Please note,
• void DRV_ETHPHY_SMIScanStop( DRV_HANDLE handle )
replaces the legacy "Ethernet Controller Library" function:
• void EthMIIMScanStop ( void )
Example
5.1.4.7.3.9 DRV_ETHPHY_SMIWriteStart Function
C
void DRV_ETHPHY_SMIWriteStart(
DRV_HANDLE handle,
unsigned int rIx,
unsigned int phyAdd,
uint16_t wData
);
Description
This function initiates SMI/MIIM write transaction for a given PHY address and register.
Preconditions
MyPHYSMIClockSet was called to set up the SMI/MIIM clock.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-280
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_ETHPHY_Open)
rIx PHY register to be accessed
phyAdd Address of PHY to be accessed
wData Data to be written
Returns
None.
Remarks
Please note,
• void DRV_ETHPHY_SMIWriteStart( DRV_HANDLE handle, unsigned int rIx, unsigned int phyAdd, uint16_t wData )
replaces the legacy "Ethernet Controller Library" function:
• void EthMIIMWriteStart(unsigned int rIx, unsigned int phyAdd, unsigned short wData)
Example
5.1.4.7.4 External PHY Support Functions
5.1.4.7.4.1 EXTPHY_MDIXCONFIGURE Type
C
typedef ETH_RESULT_CODE (* EXTPHY_MDIXCONFIGURE)(DRV_HANDLE handle, ETH_OPEN_FLAGS oFlags);
Description
Pointer To Function: ETH_RESULT_CODE EXTPHY_MDIXConfigure( DRV_HANDLE handle, ETH_OPEN_FLAGS oFlags )
Configures the MDIX mode for the Ethernet PHY.
Preconditions
Communication to the PHY should have been established.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_PHY_Open)
oFlags Requested open flags: ETH_OPEN_MDIX_AUTO, ETH_OPEN_MDIX_NORM, or
ETH_OPEN_MDIX_NORM | ETH_OPEN_MDIX_SWAP
Returns
ETH_RES_OK - if success; otherwise, ETH_RES_CFG_ERR.
Remarks
For some external PHYs, the MDIX configuration is set by pins on the device. In this case, the function will return ETH_RES_OK
if the cFlags requests the already configured interface; otherwise, ETH_RES_CFG_ERR.
5.1.4.7.4.2 EXTPHY_MIICONFIGURE Type
C
typedef ETH_RESULT_CODE (* EXTPHY_MIICONFIGURE)(DRV_HANDLE handle, ETHPHY_CONFIG_FLAGS cFlags);
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-281
Description
Pointer To Function: ETH_RESULT_CODE EXTPHY_MIIConfigure( DRV_HANDLE handle, ETHPHY_CONFIG_FLAGS cFlags )
Configures the Ethernet PHY in one of the MII/RMII operation modes.
Preconditions
Communication to the PHY should have been established.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_PHY_Open)
cFlags Requested configuration flags: ETH_PHY_CFG_RMII or ETH_PHY_CFG_MII
Returns
ETH_RES_OK - if success; otherwise, ETH_RES_CFG_ERR.
Remarks
For some external PHYs, the data interface is set by pins on the device or fuses in the host. In this case, the function will return
ETH_RES_OK if the cFlags requests the already configured interface; otherwise, ETH_RES_CFG_ERR.
5.1.4.7.4.3 EXTPHY_SMIADDRESSGET Type
C
typedef unsigned int (* EXTPHY_SMIADDRESSGET)(DRV_HANDLE handle);
Description
Pointer To Function: uint16_t EXTPHY_SMIAddressGet( DRV_HANDLE handle );
Returns the SMI/MIIM address of the Ethernet PHY.
Preconditions
Communication to the PHY should have been established.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_PHY_Open)
Returns
The SMI/MIIM Ethernet PHY address as an unsigned 16-bit integer.
Remarks
For some external PHYs, the MDIX configuration is set by pins on the device. In this case, the function will return ETH_RES_OK
if the cFlags requests the already configured interface; otherwise, ETH_RES_CFG_ERR.
5.1.4.7.4.4 EXTPHY_SMICLOCKGET Type
C
typedef unsigned int (* EXTPHY_SMICLOCKGET)(DRV_HANDLE handle);
Description
Pointer to Function: uint16_t EXTPHY_SMIClockGet( DRV_HANDLE handle );
Returns the SMI/MIIM maximum clock speed in Hz of the Ethernet PHY.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-282
Preconditions
Communication to the PHY should have been established.
Parameters
Parameters Description
handle Client's driver handle (returned from DRV_PHY_Open)
Returns
The maximum SMI/MIIM clock speed as an unsigned 16-bit integer.
Remarks
For some external PHYs, the MDIX configuration is set by pins on the device. In this case, the function will return ETH_RES_OK
if the cFlags requests the already configured interface; otherwise, ETH_RES_CFG_ERR.
5.1.4.7.5 Other Functions
5.1.4.7.5.1 DRV_ETHPHY_VersionGet Function
C
unsigned int DRV_ETHPHY_VersionGet(
const SYS_MODULE_INDEX drvIndex
);
Description
This function gets the Ethernet PHY driver version. The version is encoded as major * 10000 + minor * 100 + patch. The stringed
version can be obtained using DRV_ETHPHY_VersionStrGet()
Preconditions
None.
Parameters
Parameters Description
drvIndex Identifier for the object instance to get the version for
Returns
Current driver version in numerical format.
Remarks
None.
Example
unsigned int version;
version = DRV_ETHPHY_VersionGet( DRV_ETHPHY_INDEX_1 );
if(version < 110200)
{
// Do Something
}
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-283
5.1.4.7.5.2 DRV_ETHPHY_VersionStrGet Function
C
char * DRV_ETHPHY_VersionStrGet(
const SYS_MODULE_INDEX drvIndex
);
Description
This function gets the Ethernet PHY driver version. The version is returned as major.minor.path[type], where type is optional.
The numerical version can be obtained using DRV_ETHPHY_VersionGet()
Preconditions
None.
Parameters
Parameters Description
drvIndex Identifier for the object instance to get the version for.
Returns
Current Ethernet PHY driver version in the string format.
Remarks
None.
Example
char *version;
version = DRV_ETHPHY_VersionStrGet( DRV_ETHPHY_INDEX_1 );
printf("%s", version);
5.1.4.7.6 Data Types and Constants
5.1.4.7.6.1 DRV_ETHPHY_CLIENT_STATUS Enumeration
C
typedef enum {
DRV_ETHPHY_CLIENT_STATUS_ERROR,
DRV_ETHPHY_CLIENT_STATUS_CLOSED,
DRV_ETHPHY_CLIENT_STATUS_BUSY,
DRV_ETHPHY_CLIENT_STATUS_READY
} DRV_ETHPHY_CLIENT_STATUS;
Description
Ethernet PHY Driver Client Status
This enumeration identifies the client-specific status of the Ethernet PHY driver.
Members
Members Description
DRV_ETHPHY_CLIENT_STATUS_ERROR Unspecified error condition
DRV_ETHPHY_CLIENT_STATUS_CLOSED Client is not open
DRV_ETHPHY_CLIENT_STATUS_BUSY An operation is currently in progress
DRV_ETHPHY_CLIENT_STATUS_READY Up and running, no operations running
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-284
Remarks
None.
5.1.4.7.6.2 DRV_ETHPHY_INIT Structure
C
typedef struct {
SYS_MODULE_INIT moduleInit;
ETH_MODULE_ID ethphyId;
EXTPHY_MIICONFIGURE MyPHYMIIConfigure;
EXTPHY_MDIXCONFIGURE MyPHYMDIXConfigure;
EXTPHY_SMIADDRESSGET MyPHYSMIAddressGet;
EXTPHY_SMICLOCKGET MyPHYSMIClockGet;
} DRV_ETHPHY_INIT;
Description
Ethernet PHY Device Driver Initialization Data
This structure contains all the data necessary to initialize the Ethernet PHY device.
Members
Members Description
SYS_MODULE_INIT moduleInit; System module initialization
ETH_MODULE_ID ethphyId; Identifies peripheral (PLIB-level) ID
EXTPHY_MIICONFIGURE
MyPHYMIIConfigure;
Select MII or RMII data interface
EXTPHY_MDIXCONFIGURE
MyPHYMDIXConfigure;
AutoMDIX or Manual MDIX
EXTPHY_SMIADDRESSGET
MyPHYSMIAddressGet;
Returns PHY's SMI Address
EXTPHY_SMICLOCKGET
MyPHYSMIClockGet;
Returns PHY's clock speed
Remarks
A pointer to a structure of this format containing the desired initialization data must be passed into the DRV_ETHPHY_Initialize
routine.
5.1.4.7.6.3 SMI_SCAN_DATA_STATUS Enumeration
C
typedef enum {
SMI_SCAN_DATA_NOTVALID,
SMI_SCAN_DATA_VALID
} SMI_SCAN_DATA_STATUS;
Description
SMI Interface Scan Data Status Enumeration
This enumeration returns the status of the SMI of the Ethernet PHY.
Members
Members Description
SMI_SCAN_DATA_NOTVALID SMI interface ready for new scan/read/write
SMI_SCAN_DATA_VALID SMI interface ready for new scan/read/write
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-285
Remarks
None.
5.1.4.7.6.4 SYS_OBJ_HANDLE_INVALID Macro
C
#define SYS_OBJ_HANDLE_INVALID ( (SYS_OBJ_HANDLE) -1 )
Description
This is macro SYS_OBJ_HANDLE_INVALID.
5.1.4.7.6.5 SYS_OBJ_HANDLE_STATIC Macro
C
#define SYS_OBJ_HANDLE_STATIC ( (SYS_OBJ_HANDLE) 0 )
Description
This is macro SYS_OBJ_HANDLE_STATIC.
5.1.4.7.6.6 SYS_OBJ_HANDLE Type
C
typedef uintptr_t SYS_OBJ_HANDLE;
Description
SYS_MODULE_OBJ Rename
SYS_MODULE_OBJ is badly named. It should be SYS_MODULE_OBJ_HANDLE or something shorter. For brevity, it is
renamed to SYS_OBJ_HANDLE.
Remarks
None.
5.1.4.8 Files
Files
Name Description
drv_ethphy.h Ethernet ETHPHY Device Driver Interface File
drv_ethphy_config.h Ethernet PHY driver configuration definitions template.
Description
5.1.4.8.1 drv_ethphy.h
Ethernet ETHPHY Device Driver Interface
The Ethernet ETHPHY device driver provides a simple interface to manage an Ethernet ETHPHY peripheral using MIIM (or SMI)
interface. This file defines the interface definitions and prototypes for the Etherent ETHPHY driver.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-286
Enumerations
Name Description
DRV_ETHPHY_CLIENT_STATUS Identifies the client-specific status of the Ethernet PHY driver.
SMI_SCAN_DATA_STATUS Returns the status of the SMI of the Ethernet PHY.
Functions
Name Description
DRV_ETHPHY_ClientStatus Gets the current client-specific status the Ethernet PHY driver.
DRV_ETHPHY_Close Closes an opened instance of the Ethernet PHY driver.
DRV_ETHPHY_Deinitialize Deinitializes the specified instance of the Ethernet PHY driver module.
DRV_ETHPHY_HWConfigFlagsGet Returns the current Ethernet PHY hardware MII/RMII and
ALTERNATE/DEFAULT configuration flags.
DRV_ETHPHY_Initialize Initializes the Ethernet PHY driver.
DRV_ETHPHY_LinkScanRead Returns current link status.
DRV_ETHPHY_LinkScanStart Starts an SMI scan of the link status.
DRV_ETHPHY_LinkScanStop Stops the SMI scan of the link status.
DRV_ETHPHY_LinkStatusGet Returns the current link status.
DRV_ETHPHY_NegotiationIsComplete Returns the results of a previously initiated Ethernet PHY negotiation.
DRV_ETHPHY_NegotiationResultGet Returns the link status after a completed negotiation.
DRV_ETHPHY_Open Opens the specified Ethernet PHY driver instance and returns a handle to
it.
DRV_ETHPHY_Reinitialize Reinitializes the driver and refreshes any associated hardware settings.
DRV_ETHPHY_Reset Immediately resets the Ethernet PHY.
DRV_ETHPHY_RestartNegotiation Restarts auto-negotiation of the Ethernet PHY link.
DRV_ETHPHY_Setup Initializes Ethernet PHY communication.
DRV_ETHPHY_SMIClockSet Sets the SMI/MIIM interface clock.
DRV_ETHPHY_SMIisBusy Returns a boolean 'true' if the SMI/MIIM interface is busy with a
transaction.
DRV_ETHPHY_SMIReadResultGet Gets the result of the SMI/MIIM register read.
DRV_ETHPHY_SMIReadStart Initiates SMI/MIIM read transaction.
DRV_ETHPHY_SMIScanDataGet Gets the latest SMI/MIIM scan data result.
DRV_ETHPHY_SMIScanStart Starts the scan of the SMI/MIIM register.
DRV_ETHPHY_SMIScanStatusGet Gets the status of the SMI/MIIM scan data.
DRV_ETHPHY_SMIScanStop Stops the scan of the SMI/MIIM register.
DRV_ETHPHY_SMIWriteStart Initiates a SMI/MIIM write transaction.
DRV_ETHPHY_Status Provides the current status of the Ethernet PHY driver module.
DRV_ETHPHY_Tasks Maintains the driver's state machine and implements its ISR.
DRV_ETHPHY_VersionGet Gets the Ethernet PHY driver version in numerical format.
DRV_ETHPHY_VersionStrGet Gets the Ethernet PHY driver version in string format.
Macros
Name Description
DRV_ETHPHY_INDEX_0 Ethernet PHY driver index definitions.
DRV_ETHPHY_INDEX_1 This is macro DRV_ETHPHY_INDEX_1.
DRV_ETHPHY_INDEX_COUNT Number of valid Ethernet PHY driver indices.
5.1 Driver Library Help MPLAB Harmony Help Ethernet PHY Driver Library
5-287
Structures
Name Description
DRV_ETHPHY_INIT Contains all the data necessary to initialize the Ethernet PHY device.
Types
Name Description
EXTPHY_MDIXCONFIGURE Configures the MDIX mode for the Ethernet PHY.
EXTPHY_MIICONFIGURE Configures the Ethernet PHY in one of the MII/RMII operation modes.
EXTPHY_SMIADDRESSGET Returns the SMI/MIIM address of the Ethernet PHY.
EXTPHY_SMICLOCKGET Returns the SMI/MIIM maximum clock speed in Hz of the Ethernet PHY.
Company
Microchip Technology Incorported
FileName: drv_ethphy.h
5.1.4.8.2 drv_ethphy_config.h
Ethernet PHY Driver Configuration Definitions for the Template Version
These definitions statically define the driver's mode of operation.
Macros
Name Description
DRV_ETHPHY_CLIENTS_NUMBER Selects the miximum number of clients.
DRV_ETHPHY_INDEX Ethernet PHY static index selection.
DRV_ETHPHY_INSTANCES_NUMBER Selects the maximum number of hardware instances that can be
supported by the dynamic driver.
DRV_ETHPHY_PERIPHERAL_ID Defines an override of the peripheral ID.
PHY_NEG_DONE_TMO negotiation complete timeout, ms. based on IEEE 802.3 Clause 28 Table
28-9 autoneg_wait_timer value (max 1s)
PHY_NEG_INIT_TMO negotiation initiation timeout, ms.
PHY_RESET_CLR_TMO reset self clear timeout, ms. IEEE 802.3 Clause 22 Table 22-7 and
paragraph "22.2.4.1.1 Reset" (max 0.5s)
TCPIP_IF_PIC32INT We have an internal PIC32 MAC
File Name
drv_ethphy_config.h
Company
Microchip Technology Inc.
5.1.4.8.3 drv_ethernet_flags.h
This file can be accessed through the following link: drv_ethernet_flags.h
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-288
5.1.5 Graphics (GFX) Driver Library
5.1.5.1 Introduction
Graphics (GFX) Driver Library
for
Microchip Microcontrollers
The Graphics (GFX) Driver Layer Library is the GFX library stack available for the Microchip family of microcontrollers.
Description
The MPLAB Harmony Graphics (GFX) Library is highly modular and is optimized for Microchip’s 32-bit microcontrollers.
Additionally, the library is free for Microchip customers, easy to use, and has an open documented interface for new driver
support, which requires creation of only one C file.
5.1.5.2 Release Notes
MPLAB Harmony Version: v0.70b Graphics (GFX) Driver Layer Library Version : 4.00b Release Date: 18Nov2013
New This Release:
This is the first release of the library. The interface can change in the beta and\or 1.0 release.
Known Issues:
Nothing to report in this release.
5.1.5.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-289
5.1.5.4 Using the Library
5.1.5.4.1 Abstraction Model
The Graphics Driver Library structure consists of the following:
• Application Layer – This is the program that utilizes the Graphics Driver Library
• User Message Interface- This layer should be implemented by user to provide messages for the library
• Graphics Object Layer – This layer renders the widgets controls such as button, slider, window, and so on
• Graphics Primitives Layer – This layer implements the primitive drawing functions
• Device Display Driver – This layer is dependent on the display device being used
• Graphics Display Module – This is the display device being used
The library provides two configurations (Blocking and Non-Blocking).
For a Blocking configuration, all draw functions are blocking calls that delay the execution of program until rendering is done.
For a Non-Blocking configuration, draw functions do not wait for the drawing completion and release control to the program.
In this configuration, a draw function should be called repeatedly until the rendering of that particular draw function is complete.
This allows efficient use of microcontroller CPU time since it can perform other tasks if the rendering is not yet done.
5.1.5.4.2 Library Overview
This layer informs the GFX library on which graphics controller is being used along with the LCD. It takes input only from the
primitive layer. This layer contains all the hardware specific functions the primitive layer needs to render primitives onto the LCD.
Each driver contained in the GFX library has a build time structure associated with it that informs the primitive layer which
hardware specific functions are available. Thus when the primitive layer calls a specific rendering task it gets passed a pointer
from the driver of that task. If the task does not exist the driver passes back a NULL and the primitive layer and either render the
primitive without hardware support or let the application know that this feature is not available.
5.1.5.5 Configuring the Library
The configuration of the GFX driver is based on the file drv_gfx_config.h
This header file contains the configuration selection for the GFX Driver. Based on the selections made, the GFX Driver will
support or not support selected features. These configuration settings will apply to all instances of the GFX Driver.
This header can be placed anywhere; however, the path of this header needs to be present in the include search path for a
successful build. Refer to the Applications Overview section for more details.
The configuration of the GFX driver layer is mainly dependent on making sure the needed driver has the core driver functions
inside of it. The main rendering one being a PixelPut type function for the GFX primitive layer.
Once the GFX driver structure (GFX_DRV_DATA) is defined along with its primitive function rendering structure
(GFX_DRV_FUNCTIONS) it can be used by the GFX primitive layer.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-290
5.1.5.6 Building the Library
This section lists the files that are available in the /src folder of the GFX driver. It lists which files need to be included in the build
based on either a hardware feature present on the board or a configuration option selected by the system.
5.1.5.7 Library Interface
Data Types and Constants
Name Description
GFX_DRV_DATA Structure containing the driver graphics controller data.
GFX_DRV_FUNCTIONS Structure containing the driver functions used by the primitive layer.
LAYER_TYPE types of Layers supported by the GFX Library
PAGE_TYPE types of pages supported by the GFX Library
NUM_ALPHA_LEVELS Specific to device
ALPHA_DELTA This is macro ALPHA_DELTA.
GFX_CONFIG_DRIVER_COUNT This is macro GFX_CONFIG_DRIVER_COUNT.
GFX_ALPHA_PARAMS This is type GFX_ALPHA_PARAMS.
GFX_LAYER_PARAMS This is type GFX_LAYER_PARAMS.
System Functions
Name Description
Percentage2Alpha
DriverInterfaceInit This is function DriverInterfaceInit.
Description
All of the drivers in the GFX library must follow certain guidelines to be used by the GFX Primitve. These guidelines are defined
in gfx_gol_display_driver.h
The GFX primitve calls function pointers to reference a particular GFX driver function. If the function does not exist for a
particular driver (ie Alpha Blending) then the driver defines the function as NULL at buildtime. The function structure for a driver
file can be seen in "Basic Renderring Routines".
5.1.5.7.1 System Functions
5.1.5.7.1.1 Percentage2Alpha Function
C
inline uint8_t Percentage2Alpha(
uint8_t alphaPercentage
);
5.1.5.7.1.2 DriverInterfaceInit Function
C
inline void DriverInterfaceInit(
DRV_HANDLE * pmphandle,
DRV_PMP_MODE_CONFIG * config
);
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-291
Description
This is function DriverInterfaceInit.
5.1.5.7.2 Data Types and Constants
5.1.5.7.2.1 GFX_DRV_DATA Structure
C
typedef struct {
uint16_t orientation;
uint16_t horizontalResolution;
uint16_t verticalResolution;
uint16_t dataWidth;
uint16_t horizontalPulseWidth;
uint16_t horizontalBackPorch;
uint16_t horizontalFrontPorch;
uint16_t verticalPulseWidth;
uint16_t verticalBackPorch;
uint16_t verticalFrontPorch;
uint8_t logicShift;
enum {
LCD_TFT = 1,
LCD_MSTN,
LCD_CSTN
} LCDType;
uint8_t colorType;
uint8_t timingControl;
GFX_DRV_FUNCTIONS PrimitiveFunction;
uint8_t driverBusy;
uint8_t ready;
GFX_COLOR color;
volatile uint8_t activePage;
volatile uint8_t visualPage;
} GFX_DRV_DATA;
Description
Structure: GFX_DRV_DATA
Each driver in order to be registered with the primitive layer needs these values. they are mainly dependent on the chosen LCD.
Members
Members Description
uint16_t orientation; Orientation of the display (given in degrees of 0,90,180,270)
uint16_t horizontalResolution; Horizontal Resolution of the displayed orientation in Pixels
uint16_t verticalResolution; Vertical resolution of the displayed orientation in pixels
uint16_t horizontalPulseWidth; Horizontal Pulse Width of the LCD
uint16_t horizontalBackPorch; Horizontal BackPorch of the LCD
uint16_t horizontalFrontPorch; Horizontal FrontPorch of the LCD
uint16_t verticalPulseWidth; Vertical Pulse width of the LCD
uint16_t verticalBackPorch; Vertical BackPorch of the LCD
uint16_t verticalFrontPorch; Vertical FrontPorch of the LCD
uint8_t logicShift; Rising/Falling edge indicator of the LCD pixel clock
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-292
enum {
LCD_TFT = 1,
LCD_MSTN,
LCD_CSTN
} LCDType;
LCD type
uint8_t colorType; color depth (18BPP, 24BPP, 8BPP, palette)
uint8_t timingControl; flag to
GFX_DRV_FUNCTIONS PrimitiveFunction; List of Primitive Renderring functions available by the driver
uint8_t driverBusy; Flag to indicate driver is currently busy
uint8_t ready; Flag to indicate driver has been initialized and recognized by the primitive layer
GFX_COLOR color; current Color set for the display driver
volatile uint8_t activePage; current activepage set for the display driver
volatile uint8_t visualPage; current visualPage set for the display driver
5.1.5.7.2.2 GFX_DRV_FUNCTIONS Structure
C
typedef struct {
uint16_t (* PixelsPut)(short,short,uint16_t, uint16_t);
uint16_t (* BarFill)(short,short,short,short);
uint16_t* (* PixelArrayPut)(uint16_t*,short,short,uint16_t, uint16_t);
uint16_t* (* PixelArrayGet)(uint16_t*,short,short,uint16_t);
uint16_t (* PixelPut)(short,short);
void (* ColorSet)(GFX_COLOR);
void (* InstanceSet)(uint8_t);
uint16_t (* PageSet)(uint8_t, uint8_t);
uint16_t* (* Layer)(uint8_t, GFX_LAYER_PARAMS*);
uint16_t (* PixelGet)(short,short);
uint16_t* (* AlphaBlendWindow)(GFX_ALPHA_PARAMS*, uint16_t, uint16_t, uint8_t);
} GFX_DRV_FUNCTIONS;
Description
Structure: GFX_DRV_FUNCTIONS
This structure needs to be defined in the driver file to inform the primitive layer as to what functions are available.
Members
Members Description
uint16_t (* PixelsPut)(short,short,uint16_t,
uint16_t);
This function sends pixels of an X,Y location to the LCD controller of a given
count and linecount.
uint16_t (* BarFill)(short,short,short,short); This function sends a 2D accelerated Bar command to the LCD controller
uint16_t* (*
PixelArrayPut)(uint16_t*,short,short,uint16_t,
uint16_t);
This function sends an array of pixels at an X,Y location to the LCD controller of
a given count and linecount from a memory location.
uint16_t* (*
PixelArrayGet)(uint16_t*,short,short,uint16_t);
This function gets an array of pixels at an X,Y location to the LCD controller of
a given count and linecount from a memory location.
uint16_t (* PixelPut)(short,short); This function sends a pixel of an X,Y location to the LCD controller.
void (* ColorSet)(GFX_COLOR); This function sets the global color for the display driver
void (* InstanceSet)(uint8_t); This function sets the global color for the display driver
uint16_t (* PageSet)(uint8_t, uint8_t); See Primitive PageSet Defition
uint16_t* (* Layer)(uint8_t,
GFX_LAYER_PARAMS*);
See Primitive Layer Definition
uint16_t (* PixelGet)(short,short); This function gets a pixel of an X,Y location to the LCD controller.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-293
uint16_t* (*
AlphaBlendWindow)(GFX_ALPHA_PARAMS*,
uint16_t, uint16_t, uint8_t);
See Primitive AlphaBlendWindow Definition
5.1.5.7.2.3 LAYER_TYPE Enumeration
C
typedef enum {
PIP1 = 0,
PIP2
} LAYER_TYPE;
Description
Enumeration: LAYER_TYPE
5.1.5.7.2.4 PAGE_TYPE Enumeration
C
typedef enum {
ACTIVE_PAGE = 0,
VISUAL_PAGE,
BACKGROUND_PAGE,
FOREGROUND_PAGE,
DESTINATION_PAGE,
TRANSITION_PAGE
} PAGE_TYPE;
Description
Enumeration: PAGE_TYPE
Members
Members Description
TRANSITION_PAGE Page that displays the transition
5.1.5.7.2.5 NUM_ALPHA_LEVELS Macro
C
#define NUM_ALPHA_LEVELS 0x20 // Specific to device
Description
Specific to device
5.1.5.7.2.6 ALPHA_DELTA Macro
C
#define ALPHA_DELTA ((NUM_ALPHA_LEVELS) << 5)
Description
This is macro ALPHA_DELTA.
5.1.5.7.2.7 GFX_CONFIG_DRIVER_COUNT Macro
C
#define GFX_CONFIG_DRIVER_COUNT 1
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-294
Description
This is macro GFX_CONFIG_DRIVER_COUNT.
5.1.5.7.2.8 GFX_ALPHA_PARAMS Structure
C
typedef struct {
uint8_t foregroundPage;
short foregroundLeft;
short foregroundTop;
uint8_t backgroundPage;
short backgroundLeft;
short backgroundTop;
uint8_t destinationPage;
short destinationLeft;
short destinationTop;
uint8_t alpha;
GFX_COLOR prevAlphaColor;
} GFX_ALPHA_PARAMS;
Description
This is type GFX_ALPHA_PARAMS.
5.1.5.7.2.9 GFX_LAYER_PARAMS Structure
C
typedef struct {
uint8_t type;
uint8_t on;
uint8_t page;
short left;
short top;
uint16_t width;
uint16_t height;
short layerLeft;
short layerTop;
} GFX_LAYER_PARAMS;
Description
This is type GFX_LAYER_PARAMS.
5.1.5.8 Files
Files
Name Description
drv_gfx_display.h GFX Display Driver definitions
drv_gfx_config_template.h This is file drv_gfx_config_template.h.
Description
5.1.5.8.1 drv_gfx_display.h
GFX Display Driver definitions
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-295
This file describes the GFX Display Driver specific definitions.
Enumerations
Name Description
LAYER_TYPE types of Layers supported by the GFX Library
PAGE_TYPE types of pages supported by the GFX Library
Files
Name Description
drv_gfx_lcc.h Interface for the graphics library where the primitives are renderred and sent to the
graphics controller either external or internal
drv_gfx_s1d13517.h Interface for the graphics library where the primitives are renderred and sent to the
graphics controller either external or internal
drv_gfx_ssd1926.h Interface for the graphics library where the primitives are renderred and sent to the
graphics controller either external or internal
Functions
Name Description
DriverInterfaceInit This is function DriverInterfaceInit.
Percentage2Alpha
Macros
Name Description
ALPHA_DELTA This is macro ALPHA_DELTA.
GFX_CONFIG_DRIVER_COUNT This is macro GFX_CONFIG_DRIVER_COUNT.
NUM_ALPHA_LEVELS Specific to device
Structures
Name Description
GFX_ALPHA_PARAMS This is type GFX_ALPHA_PARAMS.
GFX_DRV_DATA Structure containing the driver graphics controller data.
GFX_DRV_FUNCTIONS Structure containing the driver functions used by the primitive layer.
GFX_LAYER_PARAMS This is type GFX_LAYER_PARAMS.
Company
Microchip Technology Incorporated
FileName: gfx_display_driver.h
5.1.5.8.1.1 drv_gfx_lcc.h
None
Enumerations
Name Description
DMA_ISR_TASK This is type DMA_ISR_TASK.
LCC_TASK This is type LCC_TASK.
Functions
Name Description
GFX_DRV_lcc_BrightnessSet Sets the brightness of the display backlight.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-296
GFX_DRV_lcc_Close closes an instance of the graphics controller
GFX_DRV_lcc_Initialize resets LCD, initializes PMP
GFX_DRV_lcc_Layer This is function GFX_DRV_lcc_Layer.
GFX_DRV_lcc_Open opens an instance of the graphics controller
GFX_DRV_lcc_PixelArrayGet gets an array of pixels of length count starting at *color
GFX_DRV_lcc_PixelArrayPut outputs an array of pixels of length count starting at *color
GFX_DRV_lcc_PixelPut outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_lcc_PixelsPut outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_lcc_SetColor Sets the color for the driver instance
GFX_DRV_lcc_SetInstance Sets the instance for the driver
GFX_DRV_lcc_SetPage This is function GFX_DRV_lcc_SetPage.
GFX_DRV_lcc_Tasks Task machine that renders the driver calls for the graphics library it must be called
peridically to output the contents of its circular buffer
GFX_PRIM_SetPIPWindow This is function GFX_PRIM_SetPIPWindow.
Macros
Name Description
GFX_DRV_lcc_COMMANDQUEUESIZE This is macro GFX_DRV_lcc_COMMANDQUEUESIZE.
PIP_BUFFER This is macro PIP_BUFFER.
USE_LCC_SCROLLING This is macro USE_LCC_SCROLLING.
USE_PIP This is macro USE_PIP.
Structures
Name Description
GFX_DRV_lcc_COMMAND Structure for the commands in the driver queue.
File Name
drv_gfx_lcc.h
Company
Microchip Technology Incorporated
5.1.5.8.1.2 drv_gfx_s1d13517.h
None
Functions
Name Description
GFX_DRV_S1D13517_AlphaBlendWindow SEE primitive layer alphablendWindow definition
GFX_DRV_S1D13517_BrightnessSet Sets the brightness of the display backlight.
GFX_DRV_S1D13517_Close closes an instance of the graphics controller
GFX_DRV_S1D13517_GetReg returns graphics controller register value (byte access)
GFX_DRV_S1D13517_Initialize resets LCD, initializes PMP
GFX_DRV_S1D13517_Layer Updates a Layer depending on the layer parameters.
GFX_DRV_S1D13517_Open opens an instance of the graphics controller
GFX_DRV_S1D13517_PixelArrayPut outputs an array of pixels of length count starting at *color
GFX_DRV_S1D13517_PixelPut outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_S1D13517_PixelsPut outputs one pixel into the frame buffer at the x,y coordinate given
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-297
GFX_DRV_S1D13517_SetColor Sets the color for the driver instance
GFX_DRV_S1D13517_SetInstance Sets the instance for the driver
GFX_DRV_S1D13517_SetPage Sets the page of a certain page type
GFX_DRV_S1D13517_SetReg updates graphics controller register value (byte access)
GFX_DRV_S1D13517_Tasks Task machine that renders the driver calls for the graphics library it
must be called peridically to output the contents of its circular buffer
Structures
Name Description
GFX_DRV_S1D13517_COMMAND Structure for the commands in the driver queue.
LAYER_REGISTERS This structure is used to describe layer registers.
File Name
S1D13517.h
Company
Microchip Technology Incorporated
5.1.5.8.1.3 drv_gfx_ssd1926.h
None
Functions
Name Description
GFX_DRV_SSD1926_BarFill Hardware accelerated barfill function
GFX_DRV_SSD1926_BrightnessSet Sets the brightness of the display backlight.
GFX_DRV_SSD1926_Busy Returns non-zero if LCD controller is busy (previous drawing operation is not
completed).
GFX_DRV_SSD1926_Close closes an instance of the graphics controller
GFX_DRV_SSD1926_GetReg returns graphics controller register value (byte access)
GFX_DRV_SSD1926_Initialize resets LCD, initializes PMP
GFX_DRV_SSD1926_Open opens an instance of the graphics controller
GFX_DRV_SSD1926_PixelArrayGet gets an array of pixels of length count starting at *color
GFX_DRV_SSD1926_PixelArrayPut outputs an array of pixels of length count starting at *color
GFX_DRV_SSD1926_PixelPut outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_SSD1926_PixelsPut outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_SSD1926_SetColor Sets the color for the driver instance
GFX_DRV_SSD1926_SetInstance Sets the instance for the driver
GFX_DRV_SSD1926_SetReg updates graphics controller register value (byte access)
GFX_DRV_SSD1926_Tasks Task machine that renders the driver calls for the graphics library it must be
called peridically to output the contents of its circular buffer
Structures
Name Description
GFX_DRV_SSD1926_COMMAND Structure for the commands in the driver queue.
GFX_DRV_SSD1926_TASK Structure for the task machine
File Name
SSD1926.h
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-298
Company
Microchip Technology Incorporated
5.1.5.8.2 drv_gfx_config_template.h
This is file drv_gfx_config_template.h.
5.1.5.9 Software Drivers
5.1.5.9.1 Low-Cost Controllerless (LCC) Graphics Driver Library
5.1.5.9.1.1 Introduction
Low-Cost Controllerless Graphics Driver Library
for
Microchip Microcontrollers
This library provides a low-level abstraction of the Low-Cost Controllerless Graphics Controller Driver Library that is available on
the Microchip family of microcontrollers with a convenient C language interface. It can be used to simplify low-level access to the
module without the necessity of interacting directly with the module's registers, there by hiding differences from one
microcontroller variant to another.
Description
Note: This information was not available at time of release and will be added in a future release of MPLAB Harmony.
5.1.5.9.1.2 Release Notes
MPLAB Harmony Version: v0.70b Low-Cost Controllerless Graphics Driver Library Version : 4.00b Release Date:
18Nov2013
New This Release:
This is the first release of the library. The interface can change in the beta and\or 1.0 release.
Known Issues:
DMA Channel 1 is non-configurable. The LCC driver will require DMA Channel 1 and not allow configuration via Harmony
system services.
5.1.5.9.1.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-299
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
5.1.5.9.1.4 Using the Library
This topic describes the basic architecture of the Low-Cost Controllerless (LCC) Graphics Driver Library and provides
information and examples on how to use it.
Interface Header File: gfx_drv_lcc.h
The interface to the Low-Cost Controllerless (LCC) Graphics Driver library is defined in the "gfx_drv_lcc.h" header file. This file is
included by the "gfx_drv_lcc.h" file. Any C language source (.c) file that uses the Low-Cost Controllerless (LCC) Graphics Driver
Library should include "gfx_drv_lcc.h".
Library File:
The GFX Low-Cost Controller library archive (.a) file installed with MPLAB Harmony.
Please refer to the MPLAB Harmony Overview for how the Low-Cost Controllerless (LCC) Graphics Driver Library interacts with
the framework.
5.1.5.9.1.4.1 Library Overview
Refer to the section Driver Overview for how the driver operates in a system.
The library interface routines are divided into various sub-sections, each of sub-section addresses one of the blocks or the
overall operation of the Low-Cost Controllerless (LCC) Graphics Controller Driver module.
Library Interface Section Description
Functions This section lists the API functions available in the library.
5.1.5.9.1.4.2 Abstraction Model
This library provides the low-level abstraction of the Low-Cost Controllerless (LCC) Graphics Controller Driver module on the
Microchip family of graphic display controllers with a convenient C language interface. This topic describes how that abstraction
is modeled in the software and introduces the library interface.
Description
Low-Cost Controllerless (LCC) Graphics Controller Driver Abstraction Block Diagram
Note: This information was not available at time of release and will be added in a future release of MPLAB Harmony.
5.1.5.9.1.5 Configuring the Library
The configuration of the Low-Cost Controllerless (LCC) Graphics Driver Library is based on the file system_config.h.
This header file contains the configuration selection for the GFX Low-Cost Controller. Based on the selections made, the
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-300
Low-Cost Controllerless (LCC) Graphics Driver Library will support or not support selected features. These configuration settings
will apply to all instances of the Low-Cost Controllerless (LCC) Graphics Driver Library.
This header can be placed anywhere; however, the path of this header needs to be present in the include search path for a
successful build. Refer to the Applications Overview section for more details.
5.1.5.9.1.6 Building the Library
This section list the files that are available in the \src of theLow-Cost Controllerless (LCC) Graphics Driver Library. It lists which
files need to be included in the build based on either a hardware feature present on the board or configuration option selected by
the system.
• gfx_drv_lcc.c
5.1.5.9.1.7 Library Interface
This section describes the Application Programming Interface (API) functions of the Low-Cost Controllerless (LCC) Graphics
Driver Library.
Refer to each section for a detailed description.
5.1.5.9.1.7.1 Functions
Functions
Name Description
GFX_DRV_lcc_Close closes an instance of the graphics controller
GFX_DRV_lcc_Initialize resets LCD, initializes PMP
GFX_DRV_lcc_Open opens an instance of the graphics controller
GFX_DRV_lcc_Tasks Task machine that renders the driver calls for the graphics library it must be called
peridically to output the contents of its circular buffer
GFX_DRV_lcc_BrightnessSet Sets the brightness of the display backlight.
GFX_DRV_lcc_PixelArrayGet gets an array of pixels of length count starting at *color
GFX_DRV_lcc_PixelArrayPut outputs an array of pixels of length count starting at *color
GFX_DRV_lcc_PixelPut outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_lcc_PixelsPut outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_lcc_SetColor Sets the color for the driver instance
GFX_DRV_lcc_SetInstance Sets the instance for the driver
GFX_DRV_lcc_Layer This is function GFX_DRV_lcc_Layer.
GFX_DRV_lcc_SetPage This is function GFX_DRV_lcc_SetPage.
GFX_PRIM_SetPIPWindow This is function GFX_PRIM_SetPIPWindow.
Description
5.1.5.9.1.7.1.1 GFX_DRV_lcc_Close Function
C
uint16_t GFX_DRV_lcc_Close(
uint8_t instance
);
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-301
Description
none
Returns
0 - instance closed 2 - instance doesn't exist 3 - instance already closed
5.1.5.9.1.7.1.2 GFX_DRV_lcc_Initialize Function
C
uint16_t GFX_DRV_lcc_Initialize(
uint8_t instance
);
Description
none
Parameters
Parameters Description
instance driver instance
Returns
NULL - call not successful (PMP driver busy) !NULL - address of the display driver queue command
5.1.5.9.1.7.1.3 GFX_DRV_lcc_Open Function
C
uint16_t GFX_DRV_lcc_Open(
uint8_t instance
);
Description
none
Returns
1 - driver not initialied 2 - instance doesn't exist 3 - instance already open instance to driver when successful
5.1.5.9.1.7.1.4 GFX_DRV_lcc_Tasks Function
C
void GFX_DRV_lcc_Tasks();
5.1.5.9.1.7.1.5 GFX_DRV_lcc_BrightnessSet Function
C
void GFX_DRV_lcc_BrightnessSet(
uint8_t instance,
uint16_t level
);
Description
none
Parameters
Parameters Description
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-302
5.1.5.9.1.7.1.6 GFX_DRV_lcc_PixelArrayGet Function
C
uint16_t* GFX_DRV_lcc_PixelArrayGet(
uint16_t * color,
short x,
short y,
uint16_t count
);
Description
none
Parameters
Parameters Description
instance driver instance
*color start of the array
x x coordinate of the start point.
y y coordinate of the end point.
count number of pixels
Returns
NULL - call not successful (lcc driver busy) !NULL - address of the display driver queue command
5.1.5.9.1.7.1.7 GFX_DRV_lcc_PixelArrayPut Function
C
uint16_t* GFX_DRV_lcc_PixelArrayPut(
uint16_t * color,
short x,
short y,
uint16_t count,
uint16_t lineCount
);
Description
none
Parameters
Parameters Description
instance driver instance
*color start of the array
x x coordinate of the start point.
y y coordinate of the end point.
count number of pixels
Returns
NULL - call not successful !NULL - handle to the number of pixels remaining
5.1.5.9.1.7.1.8 GFX_DRV_lcc_PixelPut Function
C
uint16_t GFX_DRV_lcc_PixelPut(
short x,
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-303
short y
);
Description
none
Parameters
Parameters Description
x,y pixel coordinates
Returns
NULL - call not successful (lcc driver busy) !NULL - address of the display driver queue command
5.1.5.9.1.7.1.9 GFX_DRV_lcc_PixelsPut Function
C
uint16_t GFX_DRV_lcc_PixelsPut(
short x,
short y,
uint16_t count,
uint16_t lineCount
);
Description
none
Parameters
Parameters Description
x,y pixel coordinates
Returns
NULL - call not successful (lcc driver busy) !NULL - address of the display driver queue command
5.1.5.9.1.7.1.10 GFX_DRV_lcc_SetColor Function
C
void GFX_DRV_lcc_SetColor(
GFX_COLOR color
);
Returns
none
5.1.5.9.1.7.1.11 GFX_DRV_lcc_SetInstance Function
C
void GFX_DRV_lcc_SetInstance(
uint8_t instance
);
Returns
none
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-304
5.1.5.9.1.7.1.12 GFX_DRV_lcc_Layer Function
C
uint16_t* GFX_DRV_lcc_Layer(
uint8_t instance,
GFX_LAYER_PARAMS* layer
);
Description
This is function GFX_DRV_lcc_Layer.
5.1.5.9.1.7.1.13 GFX_DRV_lcc_SetPage Function
C
uint16_t GFX_DRV_lcc_SetPage(
uint8_t pageType,
uint8_t page
);
Description
This is function GFX_DRV_lcc_SetPage.
5.1.5.9.1.7.1.14 GFX_PRIM_SetPIPWindow Function
C
void GFX_PRIM_SetPIPWindow(
uint16_t left,
uint16_t top,
uint16_t hlength,
uint16_t vlength,
uint16_t pipx,
uint16_t pipy
);
Description
This is function GFX_PRIM_SetPIPWindow.
5.1.5.9.1.7.2 Data Types and Constants
Enumerations
Name Description
LCC_TASK This is type LCC_TASK.
DMA_ISR_TASK This is type DMA_ISR_TASK.
Macros
Name Description
USE_LCC_SCROLLING This is macro USE_LCC_SCROLLING.
USE_PIP This is macro USE_PIP.
PIP_BUFFER This is macro PIP_BUFFER.
GFX_DRV_lcc_COMMANDQUEUESIZE This is macro GFX_DRV_lcc_COMMANDQUEUESIZE.
Structures
Name Description
GFX_DRV_lcc_COMMAND Structure for the commands in the driver queue.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-305
Description
5.1.5.9.1.7.2.1 USE_LCC_SCROLLING Macro
C
#define USE_LCC_SCROLLING
Description
This is macro USE_LCC_SCROLLING.
5.1.5.9.1.7.2.2 USE_PIP Macro
C
#define USE_PIP
Description
This is macro USE_PIP.
5.1.5.9.1.7.2.3 GFX_DRV_lcc_COMMAND Structure
C
typedef struct {
uint8_t instance;
union {
uint32_t Val;
struct {
uint8_t b0 : 1;
uint8_t b1 : 1;
uint8_t b2 : 1;
uint8_t b3 : 1;
uint8_t b4 : 1;
uint8_t b5 : 1;
uint8_t b6 : 1;
uint8_t b7 : 1;
uint8_t b8 : 1;
uint8_t b9 : 1;
uint8_t b10 : 1;
uint8_t b11 : 1;
uint8_t b12 : 1;
uint8_t b13 : 1;
uint8_t b14 : 1;
uint8_t b15 : 1;
uint8_t b16 : 1;
uint8_t b17 : 1;
uint8_t b18 : 1;
uint8_t b19 : 1;
uint8_t b20 : 1;
uint8_t b21 : 1;
uint8_t b22 : 1;
uint8_t b23 : 1;
uint8_t b24 : 1;
uint8_t b25 : 1;
uint8_t b26 : 1;
uint8_t b27 : 1;
uint8_t b28 : 1;
uint8_t b29 : 1;
uint8_t b30 : 1;
uint8_t b31 : 1;
} bits;
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-306
} address;
uint16_t * array;
uint16_t data;
uint16_t count;
uint16_t lineCount;
uint8_t task;
} GFX_DRV_lcc_COMMAND;
Description
Structure: GFX_DRV_lcc_COMMAND
None
5.1.5.9.1.7.2.4 PIP_BUFFER Macro
C
#define PIP_BUFFER (3)
Description
This is macro PIP_BUFFER.
5.1.5.9.1.7.2.5 LCC_TASK Enumeration
C
typedef enum {
UPDATE_CLOCK = 0,
INITIALIZE,
WAIT_TRANSMIT_PIXELS,
FINISH_TRANSMIT_PIXELS,
WAIT_TRANSMIT_ARRAY,
FINISH_TRANSMIT_ARRAY,
WAIT_RECEIVE,
READ_RECEIVE,
PUT_ARRAY,
PUT_PIXELS,
GET_PIXELS,
COPY_PIXELS,
PAGE,
LAYERS
} LCC_TASK;
Description
This is type LCC_TASK.
5.1.5.9.1.7.2.6 GFX_DRV_lcc_COMMANDQUEUESIZE Macro
C
#define GFX_DRV_lcc_COMMANDQUEUESIZE 480
Description
This is macro GFX_DRV_lcc_COMMANDQUEUESIZE.
5.1.5.9.1.7.2.7 DMA_ISR_TASK Enumeration
C
typedef enum {
ACTIVE_PERIOD = 0,
BLANKING_PERIOD,
FINISH_LINE,
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-307
OVERFLOW,
PIP,
SCROLL
} DMA_ISR_TASK;
Description
This is type DMA_ISR_TASK.
5.1.5.9.1.8 Files
Files
Name Description
5.1.5.9.1.8.1 drv_gfx_lcc_config_template.h
• Module for Microchip Graphics Library
• This file contains compile time options for the Graphics Library.
*******************************************************************
• FileName: GraphicsConfig.h
• Dependencies: none
• Processor: PIC24F, PIC24H, dsPIC, PIC32
• Compiler: C30 V3.00/C32
• Company: Microchip Technology, Inc.
*
• Software License Agreement
*
• Copyright © 2008 Microchip Technology Inc. All rights reserved.
• Microchip licenses to you the right to use, modify, copy and distribute
• Software only when embedded on a Microchip microcontroller or digital
• signal controller, which is integrated into your product or third party
• product (pursuant to the sublicense terms in the accompanying license
• agreement).
*
• You should refer to the license agreement accompanying this Software
• for additional information regarding your rights and obligations.
*
• SOFTWARE AND DOCUMENTATION ARE PROVIDED ?AS IS? WITHOUT WARRANTY OF ANY
• KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY
• OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR
• PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR
• OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION,
• BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT
• DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL,
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-308
• INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA,
• COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY
• CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
• OR OTHER SIMILAR COSTS.
*
• Author Date Comment
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
• Anton Alkhimenok 10/28/2007 Initial Version
• Pradeep Budagutta 10/28/2007 Display related defines
• moved to DisplayConfig.h
5.1.5.10 Hardware Drivers
5.1.5.10.1 OTM2201A Graphics Controller Driver Library
5.1.5.10.1.1 Introduction
OTM2201A Graphics Controller Driver Library
for
Microchip Microcontrollers
This library provides a low-level abstraction of the OTM2201A Graphics Controller Driver Library that is available on the
Microchip family of microcontrollers with a convenient C language interface. It can be used to simplify low-level access to the
module without the necessity of interacting directly with the module's registers, there by hiding differences from one
microcontroller variant to another.
Description
Note: This information was not available at time of release and will be added in a future release of MPLAB Harmony.
5.1.5.10.1.2 Release Notes
MPLAB Harmony Version: v0.70b OTM2201A Graphics Controller Driver Library Version : 4.00b Release Date: 18Nov2013
New This Release:
This is the first release of the library. The interface can change in the beta and\or 1.0 release.
Known Issues:
Nothing to report in this release.
5.1.5.10.1.3 SW License Agreement
(c) 2013 Microchip Technology Inc.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-309
Microchip licenses this software to you solely for use with Microchip products. The software is owned by Microchip and its
licensors, and is protected under applicable copyright laws. All rights reserved.
SOFTWARE IS PROVIDED "AS IS" MICROCHIP EXPRESSLY DISCLAIMS ANY WARRANTY OF ANY KIND, WHETHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR
ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, HARM TO
YOUR EQUIPMENT, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
CONTRIBUTION, OR OTHER SIMILAR COSTS.
To the fullest extent allowed by law, Microchip and its licensors liability shall not exceed the amount of fees, if any, that you have
paid directly to Microchip to use this software.
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS.
5.1.5.10.1.4 Using the Library
This topic describes the basic architecture of the OTM2201A Graphics Controller Driver Library and provides information and
examples on how to use it.
Interface Header File: drv_gfx_otm2201a.h
The interface to the OTM2201A Graphics Controller Driver library is defined in the "drv_gfx_otm2201a.h" header file. This file is
included by the "gfx_primitive.h" file. Any C language source (.c) file that uses the OTM2201A Graphics Controller Driver library
should include "gfx_primitive.h".
Library File:
The OTM2201A Graphics Controller Driver library archive (.a) file installed with MPLAB Harmony.
Please refer to the MPLAB Harmony Overview for how the OTM2201A Graphics Controller Driver interacts with the framework.
5.1.5.10.1.4.1 Abstraction Model
This library provides the low-level abstraction of the OTM2201A Graphics Controller Driver module on the Microchip family of
microcontrollers with a convenient C language interface. This topic describes how that abstraction is modeled in the software
and introduces the library interface.
Description
OTM2201A Graphics Controller Driver Abstraction Block Diagram
Note: This information was not available at time of release and will be added in a future release of MPLAB Harmony.
5.1.5.10.1.4.2 Library Overview
Refer to the section Driver Overview for how the driver operates in a system.
The library interface routines are divided into various sub-sections, each of sub-section addresses one of the blocks or the
overall operation of the OTM2201 Graphics Controller Driver module.
Library Interface Section Description
Functions This section lists the API functions available in the library.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-310
5.1.5.10.1.5 Configuring the Driver Library
The configuration of the OTM2201 Graphics Controller Driver is based on the file sys_config.h
This header file contains the configuration selection for the OTM2201 Graphics Controller Driver. Based on the selections made,
the OTM2201 Graphics Controller Driver will support or not support selected features. These configuration settings will apply to
all instances of the OTM2201 Graphics Controller Driver.
This header can be placed anywhere; however, the path of this header needs to be present in the include search path for a
successful build. Refer to the Applications Overview section for more details.
5.1.5.10.1.6 Building the Library
This section list the files that are available in the \src of the OTM2201A Graphics Controller Driver. It lists which files need to be
included in the build based on either a hardware feature present on the board or configuration option selected by the system.
• drv_gfx_otm2201a.c
5.1.5.10.1.7 Library Interface
This section describes the Application Programming Interface (API) functions of the OTM2201A Graphics Controller Driver
Library.
Refer to each section for a detailed description.
5.1.5.10.1.7.1 Functions
Functions
Name Description
GFX_DRV_OTM2201A_AddressSet Sets the start GRAM address where pixel data to be written
GFX_DRV_OTM2201A_BrightnessSet Sets the brightness of the display backlight.
GFX_DRV_OTM2201A_Busy Returns non-zero value if LCD controller is busy (previous drawing
operation is not completed).
GFX_DRV_OTM2201A_Close Closes an instance of the graphics controller
GFX_DRV_OTM2201A_ColorSet Sets the color for the driver instance
GFX_DRV_OTM2201A_Initialize Intialize OTM2201A device
GFX_DRV_OTM2201A_InstanceSet Sets the instance for the driver
GFX_DRV_OTM2201A_Open Opens an instance of the graphics controller
GFX_DRV_OTM2201A_PixelArrayGet Gets an array of pixels of length count into an array starting at *color
GFX_DRV_OTM2201A_PixelArrayPut Outputs an array of pixels of length count starting at *color
GFX_DRV_OTM2201A_PixelPut Outputs one pixel into the frame buffer at the x,y coordinate given
GFX_DRV_OTM2201A_PixelsPut Outputs count number of pixels into the frame buffer from the given x,y
coordinate.
GFX_DRV_OTM2201A_RegGet Returns graphics controller register value (byte access)
GFX_DRV_OTM2201A_RegSet Updates graphics controller register value (byte access)
GFX_DRV_OTM2201A_Tasks Task machine that renders the driver calls for the graphics library it must
be called peridically to output the contents of its circular buffer
Description
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-311
5.1.5.10.1.7.1.1 GFX_DRV_OTM2201A_AddressSet Function
C
uint16_t GFX_DRV_OTM2201A_AddressSet(
uint32_t address
);
Description
Address consists of Lower 8 bit at Register REG_RAM_ADDR_LOW and Higher 8 bit at Register REG_RAM_ADDR_HIGH
Parameters
Parameters Description
address pixel address
Returns
DRV_OTM2201A_ERROR_PMP_WRITE - returns error during PMP Write, DRV_OTM2201A_ERROR_NO_ERROR - returns
success without any error.
5.1.5.10.1.7.1.2 GFX_DRV_OTM2201A_BrightnessSet Function
C
void GFX_DRV_OTM2201A_BrightnessSet(
uint8_t instance,
uint16_t level
);
Description
Sets the brightness of the display backlight.
Parameters
Parameters Description
instance instance of the driver
level Brightness level. Valid values are 0 to 100. 0 = brightness level is zero or display
is turned off. 100 = brightness level is maximum.
Returns
none
5.1.5.10.1.7.1.3 GFX_DRV_OTM2201A_Busy Function
C
uint16_t GFX_DRV_OTM2201A_Busy(
uint8_t instance
);
Description
Returns non-zero value if LCD controller is busy (previous drawing operation is not completed).
Parameters
Parameters Description
instance driver instance
Returns
DRV_OTM2201A_ERROR_DEVICE_BUSY - Device is busy, DRV_OTM2201A_ERROR_NO_ERROR - Success, driver is not
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-312
busy.
5.1.5.10.1.7.1.4 GFX_DRV_OTM2201A_Close Function
C
uint16_t GFX_DRV_OTM2201A_Close(
uint8_t instance
);
Description
Closes an instance if instance exists and not already closed
Parameters
Parameters Description
instance instance of the driver
Returns
DRV_OTM2201A_INSTANCE_CLOSED - instance closed, DRV_OTM2201A_INSTANCE_DOESNT_EXIST - instance doesn't
exist, DRV_OTM2201A_INSTANCE_ALREADY_CLOSED - instance already closed.
5.1.5.10.1.7.1.5 GFX_DRV_OTM2201A_ColorSet Function
C
void GFX_DRV_OTM2201A_ColorSet(
GFX_COLOR color
);
Description
Sets the color for the driver instance
Parameters
Parameters Description
color 16 bit 565 format color value
Returns
none
5.1.5.10.1.7.1.6 GFX_DRV_OTM2201A_Initialize Function
C
uint16_t GFX_DRV_OTM2201A_Initialize(
uint8_t instance
);
Description
Initialize OTM2201A device by initializing PMP interface, initializing command buffer for current instance initialize device registers
Parameters
Parameters Description
instance driver instance
Returns
DRV_OTM2201A_ERROR_QUEUE_FULL - OTM2201A command queue is full, DRV_OTM2201A_ERROR_REG_GET -
OTM2201A Error while reading register, DRV_OTM2201A_ERROR_REG_SET - OTM2201A Error while writing register,
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-313
DRV_OTM2201A_ERROR_DEVICE_BUSY - OTM2201A device is busy, DRV_OTM2201A_ERROR_NO_ERROR - Success
without any error.
5.1.5.10.1.7.1.7 GFX_DRV_OTM2201A_InstanceSet Function
C
void GFX_DRV_OTM2201A_InstanceSet(
uint8_t instance
);
Description
Sets the instance for the driver
Parameters
Parameters Description
instance driver instance
Returns
none
5.1.5.10.1.7.1.8 GFX_DRV_OTM2201A_Open Function
C
uint16_t GFX_DRV_OTM2201A_Open(
uint8_t instance
);
Description
Opens the instance of driver if instance is valid and not already opened
Parameters
Parameters Description
instance instance of the driver
Returns
DRV_OTM2201A_NEW_INSTANCE_OPEN - driver not initialied, DRV_OTM2201A_INSTANCE_DOESNT_EXIST - instance
doesn't exist, DRV_OTM2201A_INSTANCE_ALREADY_OPEN - instance already open.
5.1.5.10.1.7.1.9 GFX_DRV_OTM2201A_PixelArrayGet Function
C
uint16_t* GFX_DRV_OTM2201A_PixelArrayGet(
uint16_t * color,
short x,
short y,
uint16_t count
);
Description
Gets an array of pixels of length count into an array starting at *color
Parameters
Parameters Description
color Pointer to array where color data is to be loaded
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-314
x pixel coordinate on x axis
y pixel coordinate on y axis
count count number of pixels
Returns
DRV_OTM2201A_ERROR_QUEUE_FULL - OTM2201A command queue is full, DRV_OTM2201A_ERROR_NO_ERROR -
Success without any error.
5.1.5.10.1.7.1.10 GFX_DRV_OTM2201A_PixelArrayPut Function
C
uint16_t* GFX_DRV_OTM2201A_PixelArrayPut(
uint16_t * color,
short x,
short y,
uint16_t count,
uint16_t lineCount
);
Description
Outputs an array of pixels of length count starting at *color
Parameters
Parameters Description
color pointer to array of color of pixels
x pixel coordinate on x axis.
y pixel coordinate on y axis.
count count number of pixels
lineCount lineCount number of display lines
Returns
handle - handle to the number of pixels remaining, DRV_OTM2201A_ERROR_QUEUE_FULL - OTM2201A command queue is
full.
5.1.5.10.1.7.1.11 GFX_DRV_OTM2201A_PixelPut Function
C
uint16_t GFX_DRV_OTM2201A_PixelPut(
short x,
short y
);
Description
Outputs one pixel into the frame buffer at the x,y coordinate given
Parameters
Parameters Description
x pixel coordinate on x axis
y pixel coordinate on y axis
Returns
DRV_OTM2201A_ERROR_QUEUE_FULL - OTM2201A command queue is full, DRV_OTM2201A_ERROR_NO_ERROR -
Success without any error.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-315
5.1.5.10.1.7.1.12 GFX_DRV_OTM2201A_PixelsPut Function
C
uint16_t GFX_DRV_OTM2201A_PixelsPut(
short x,
short y,
uint16_t count,
uint16_t lineCount
);
Description
Outputs count number of pixels into the frame buffer from the given x,y coordinate.
Parameters
Parameters Description
x pixel coordinate on x axis
y pixel coordinate on y axis
count count number of pixels
lineCount lineCount number of display lines
Returns
DRV_OTM2201A_ERROR_QUEUE_FULL - OTM2201A command queue is full, DRV_OTM2201A_ERROR_NO_ERROR -
Success without any error.
5.1.5.10.1.7.1.13 GFX_DRV_OTM2201A_RegGet Function
C
uint8_t GFX_DRV_OTM2201A_RegGet(
uint16_t index,
uint16_t * data
);
Description
Returns graphics controller register value (byte access)
Parameters
Parameters Description
index register number
*data array to store register data
Returns
DRV_OTM2201A_ERROR_PMP_WRITE - returns error during PMP Write, DRV_OTM2201A_ERROR_PMP_READ - returns
error during PMP Read, DRV_OTM2201A_ERROR_NO_ERROR - returns success without any error.
5.1.5.10.1.7.1.14 GFX_DRV_OTM2201A_RegSet Function
C
uint16_t GFX_DRV_OTM2201A_RegSet(
uint16_t index,
uint16_t value,
uint32_t repeatCount
);
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-316
Description
This call can set "value" of the register accessed by its "index" and can repeat the same by number of times mentioned in
"repeatCount"
Parameters
Parameters Description
index register number
value value to write to register
repeatCount repeatCount number of times value is to be written to the register.
Returns
DRV_OTM2201A_ERROR_PMP_WRITE - returns error during PMP Write, DRV_OTM2201A_ERROR_NO_ERROR - returns
success without any error.
5.1.5.10.1.7.1.15 GFX_DRV_OTM2201A_Tasks Function
C
void GFX_DRV_OTM2201A_Tasks();
Description
Task machine that renders the driver calls for the graphics library it must be called peridically to output the contents of its circular
buffer.
5.1.5.10.1.7.2 Data Types and Constants
Enumerations
Name Description
OTM2201A_TASK Enumeration for command type.
Structures
Name Description
GFX_DRV_OTM2201A_COMMAND Structure for the commands in the driver queue.
Description
5.1.5.10.1.7.2.1 GFX_DRV_OTM2201A_COMMAND Structure
C
typedef struct {
uint8_t instance;
uint32_t address;
uint16_t * array;
uint16_t data;
uint16_t count;
uint16_t lineCount;
OTM2201A_TASK task;
} GFX_DRV_OTM2201A_COMMAND;
Description
Structure: GFX_DRV_OTM2201A_COMMAND
Structure for the commands in the driver queue.
5.1 Driver Library Help MPLAB Harmony Help Graphics (GFX) Driver Library
5-317
Parameters
Parameters Description
instance instance of the driver
address pixel address
array pointer to array of pixel data
data pixel color
count count number of pixels in one line
lineCount lineCount number of lines of display
task Type of task (OTM2201A_TASK enum)
5.1.5.10.1.7.2.2 OTM2201A_TASK Enumeration
VOIR EGALEMENT :
Parent Directory -
0580_CatalystGuide.p..> 2023-08-25 15:38 109K
35-restaurants-avec-..> 2023-08-25 15:38 596K
200-sejours---hôtels..> 2023-08-25 15:38 596K
200-sejours---hotels..> 2023-08-25 15:38 591K
200_series_guide_040..> 2023-08-25 15:38 109K
205-restaurants-avec..> 2023-08-25 15:38 596K
225-restaurants-avec..> 2023-08-25 15:38 596K
240-restaurants-avec..> 2023-08-25 15:38 596K
240-restaurants-avec..> 2023-08-25 15:38 591K
320-restaurants-avec..> 2023-08-25 15:38 596K
320-restaurants-avec..> 2023-08-25 15:38 591K
400-séjours---hôtels..> 2023-08-25 15:38 596K
400-sejours---hotels..> 2023-08-25 15:38 591K
470-repas-avec-une-s..> 2023-08-25 15:38 596K
470-repas-avec-une-s..> 2023-08-25 15:38 591K
512guide-(1).pdf-GUI..> 2023-08-25 15:38 109K
512guide-(2).pdf-GUI..> 2023-08-25 15:38 109K
512guide.pdf-GUIDE.html 2023-08-25 15:38 109K
2138_white_paper_3d_..> 2023-08-25 15:38 90K
6310_usersguide_fr.p..> 2023-08-25 15:38 109K
6310i_usersguide_fr...> 2023-08-25 15:38 109K
7650_usersguide_fr.p..> 2023-08-25 15:38 109K
7912G_user_guide.pdf..> 2023-08-25 15:38 109K
10314_Guide.pdf-GUID..> 2023-08-25 15:38 90K
86901-200-Series-Sma..> 2023-08-25 15:38 109K
111672_UserGuide_ARC..> 2023-08-25 15:38 93K
111700_UserGuide_ARC..> 2023-08-25 15:38 90K
111793_UserGuide_ARC..> 2023-08-25 15:38 90K
111821_UserGuide_ARC..> 2023-08-25 15:38 90K
112258_UserGuide_ARC..> 2023-08-25 15:38 90K
112278_UserGuide_ARC..> 2023-08-25 15:38 90K
112322_UserGuide_ARC..> 2023-08-25 15:38 90K
112328_UserGuide_ARC..> 2023-08-25 15:38 90K
112359_UserGuide_ARC..> 2023-08-25 15:38 90K
112384_UserGuide_ARC..> 2023-08-25 15:38 90K
112459_UserGuide_ARC..> 2023-08-25 15:38 90K
112495_QuickStartGui..> 2023-08-25 15:38 90K
112509_UserGuide_ARC..> 2023-08-25 15:38 90K
112528_UserGuide_ARC..> 2023-08-25 15:38 90K
112539_UserGuide_ARC..> 2023-08-25 15:38 90K
112598b_UserGuide_AR..> 2023-08-25 15:38 90K
112768b_UserGuide_AR..> 2023-08-25 15:38 90K
113272_UserGuide_ARC..> 2023-08-25 15:38 90K
113329_UserGuide_ARC..> 2023-08-25 15:38 90K
113329_UserGuide_ARC..> 2023-08-25 15:38 90K
113338_UserGuide_ARC..> 2023-08-25 15:38 90K
113644_UserGuide_ARC..> 2023-08-25 15:38 90K
114249_UserGuide_ARC..> 2023-08-25 15:38 90K
114249_UserGuide_ARC..> 2023-08-25 15:38 90K
114676_UserGuide_ARC..> 2023-08-25 15:38 90K
710517_1_linksys_spa..> 2023-08-25 15:38 109K
1104540_WVC210_Quick..> 2023-08-25 15:38 109K
11795414_PrecisBalan..> 2023-08-25 15:38 114K
ACER-AS_3630_User_Gu..> 2023-08-25 15:38 90K
ACER-AS_3630_User_Gu..> 2023-08-25 15:38 44K
ACER-Acer-Liquid-S10..> 2023-08-25 15:38 90K
ACER-Acer-Liquid-S10..> 2023-08-25 15:38 44K
ACER-Acer-Liquid-Z22..> 2023-08-25 15:38 90K
ACER-Acer-Liquid-Z22..> 2023-08-25 15:38 44K
ACER-Acer-n50-Quick-..> 2023-08-25 15:38 90K
ACER-Acer-n50-Quick-..> 2023-08-25 15:38 44K
ACER-App.-Guide_Acer..> 2023-08-25 15:38 90K
ACER-App.-Guide_Acer..> 2023-08-25 15:38 44K
ACER-Aspire-5810T-58..> 2023-08-25 15:38 775K
ACER-Aspire-Generic-..> 2023-08-25 15:38 90K
ACER-Aspire-Generic-..> 2023-08-25 15:38 44K
ACER-FR_Acer_Classro..> 2023-08-25 15:38 90K
ACER-FR_Acer_Classro..> 2023-08-25 15:38 45K
ACER-QuickStartGuide..> 2023-08-25 15:38 90K
ACER-V173p-Service-G..> 2023-08-25 15:38 90K
ACER-V173p-Service-G..> 2023-08-25 15:38 44K
ACER-acer-aspire-151..> 2023-08-25 15:38 90K
ACER-acer-aspire-151..> 2023-08-25 15:38 45K
ACER-acer-aspire-553..> 2023-08-25 15:38 90K
ACER-acer-aspire-553..> 2023-08-25 15:38 44K
ACER-acer_liquid_z3_..> 2023-08-25 15:38 90K
ACER-acer_liquid_z3_..> 2023-08-25 15:38 44K
ADOBEFLASHLITE1.Xgui..> 2012-02-07 11:27 229K
APIC-EM-EasyQoS-Desi..> 2023-08-25 15:38 109K
ARCHOS_2vision_User_..> 2023-08-25 15:39 90K
ARCHOS_2vision_User_..> 2023-08-25 15:39 90K
ARCHOS_2vision_User_..> 2023-08-25 15:39 90K
ARCHOS_2vision_User_..> 2023-08-25 15:39 90K
ARCHOS_2vision_User_..> 2023-08-25 15:39 90K
ARCHOS_2vision_User_..> 2023-08-25 15:39 90K
ARCHOS_2vision_User_..> 2023-08-25 15:39 90K
AS_3630_User_Guide_E..> 2023-08-25 15:39 44K
AS_GE_User_Guide_Eng..> 2023-08-25 15:39 44K
AS_GE_User_Guide_Fre..> 2023-08-25 15:39 44K
AS_ONE_User_Guide_Fr..> 2023-08-25 15:39 44K
ATP_SubmittingAppGui..> 2023-08-25 15:39 109K
Acer-20Regulatory-20..> 2023-08-25 15:38 45K
Acer-20Regulatory-20..> 2023-08-25 15:38 45K
Acer-20Regulatory-20..> 2023-08-25 15:38 45K
Acer-20Windows-20Tab..> 2023-08-25 15:38 45K
Acer-20Windows-20Tab..> 2023-08-25 15:38 44K
Acer-20n50-20Quick-2..> 2023-08-25 15:38 44K
Acer-Liquid-S100-gui..> 2023-08-25 15:38 44K
Acer-Liquid-Z220-use..> 2023-08-25 15:38 44K
Adaptateurs-Brocade-..> 2023-08-25 15:38 3.6M
Adobe-as3_devguide.p..> 2023-08-25 15:38 5.2M
Analog-Devices-Visua..> 2023-08-25 15:38 2.6M
Anneau-guide-câbe-m..> 2023-08-25 15:38 74K
Anneau-guide-câbe-mo..> 2023-08-25 15:38 79K
Anneau-guide-câbe-mo..> 2023-08-25 15:38 79K
Anneau-guide-câbe-mo..> 2023-08-25 15:38 79K
Anneau guide-mod.int..> 2023-08-25 15:38 74K
Anneau guide-mod.int..> 2023-08-25 15:38 74K
App.-20Guide_Acer_1...> 2023-08-25 15:38 44K
Applairportextreme_8..> 2023-08-25 15:38 2.1M
Applairportextreme_8..> 2023-08-25 15:38 2.1M
Apple-ARD3_AdminGuid..> 2023-08-25 15:38 2.9M
Apple-ARD3_AdminGuid..> 2023-08-25 15:38 2.9M
Apple-AV-Foundation-..> 2023-08-25 15:38 3.7M
Apple-Accessibility-..> 2023-08-25 15:38 2.7M
Apple-Advanced-Memor..> 2023-08-25 15:38 1.5M
Apple-AirPort-Extrem..> 2023-08-25 15:38 4.6M
Apple-AirPort-Extrem..> 2023-08-25 15:38 1.4M
Apple-AirPort-Time-C..> 2023-08-25 15:38 4.6M
Apple-App-Sandbox-De..> 2023-08-25 15:38 2.0M
Apple-AppStoreMarket..> 2023-08-25 15:38 2.8M
Apple-AppStoreMarket..> 2023-08-25 15:38 2.8M
Apple-Apple_TV_2nd_g..> 2023-08-25 15:38 2.7M
Apple-Blocks-Program..> 2023-08-25 15:38 2.9M
Apple-Boot-Camp-Guid..> 2023-08-25 15:38 3.5M
Apple-Boot_Camp_Guid..> 2023-08-25 15:38 3.1M
Apple-Boot_Camp_Guid..> 2023-08-25 15:38 3.2M
Apple-Business-Manag..> 2023-08-25 15:38 46K
Apple-Case-Design-Gu..> 2023-08-25 15:38 2.7M
Apple-CinemaDisplays..> 2023-08-25 15:38 3.2M
Apple-Cocoa-Bindings..> 2023-08-25 15:38 2.0M
Apple-CocoaDrawingGu..> 2023-08-25 15:38 2.2M
Apple-CocoaDrawingGu..> 2023-08-25 15:38 2.2M
Apple-CocoaEncyclope..> 2023-08-25 15:38 3.0M
Apple-CocoaEncyclope..> 2023-08-25 15:38 2.9M
Apple-CodeSigningGui..> 2023-08-25 15:38 2.7M
Apple-CodeSigningGui..> 2023-08-25 15:38 2.7M
Apple-Concurrency-Pr..> 2023-08-25 15:38 1.2M
Apple-Core-Data-Mode..> 2023-08-25 15:38 2.5M
Apple-Core-Text-Prog..> 2023-08-25 15:38 1.7M
Apple-Cryptographic-..> 2023-08-25 15:38 1.8M
Apple-Date-and-Time-..> 2023-08-25 15:38 1.4M
Apple-Document-Based..> 2023-08-25 15:38 1.8M
Apple-Enterprise_Dep..> 2023-08-25 15:38 2.7M
Apple-Event-Driven-X..> 2023-08-25 15:38 1.5M
Apple-Event-Handling..> 2023-08-25 15:38 2.3M
Apple-External-Acces..> 2023-08-25 15:38 3.0M
Apple-FRLogic_Pro_7_..> 2023-08-25 15:38 280K
Apple-Final-Cut-Pro-..> 2023-08-25 15:38 1.8M
Apple-Final-Cut-Pro-..> 2023-08-25 15:38 3.3M
Apple-Final-Cut-Pro-..> 2023-08-25 15:38 3.2M
Apple-Formulas_and_F..> 2023-08-25 15:38 3.5M
Apple-Guide_de_confi..> 2023-08-25 15:38 2.3M
Apple-Guide_de_confi..> 2023-08-25 15:38 2.3M
Apple-Guide_de_confi..> 2023-08-25 15:38 2.1M
Apple-Guide_de_confi..> 2023-08-25 15:38 2.2M
Apple-Guide_de_confi..> 2023-08-25 15:38 3.0M
Apple-Guide_de_confi..> 2023-08-25 15:38 3.1M
Apple-Guide_de_l_adm..> 2023-08-25 15:38 2.3M
Apple-Guide_de_l_adm..> 2023-08-25 15:38 2.3M
Apple-Guide_de_l_uti..> 2023-08-25 15:38 2.6M
Apple-Guide_de_l_uti..> 2023-08-25 15:38 2.6M
Apple-Guide_de_l_uti..> 2023-08-25 15:38 3.2M
Apple-Guide_de_l_uti..> 2023-08-25 15:38 3.1M
Apple-Guide_de_l_uti..> 2023-08-25 15:38 3.1M
Apple-Guide_des_fonc..> 2023-08-25 15:38 2.2M
Apple-Guide_des_fonc..> 2023-08-25 15:38 2.2M
Apple-InstrumentsUse..> 2023-08-25 15:38 1.7M
Apple-InstrumentsUse..> 2023-08-25 15:38 1.6M
Apple-Key-Value-Obse..> 2023-08-25 15:39 2.8M
Apple-Keynote-2-Guid..> 2023-08-25 15:39 4.4M
Apple-Keynote2_UserG..> 2023-08-25 15:39 2.2M
Apple-Keynote2_UserG..> 2023-08-25 15:39 2.2M
Apple-Local-and-Push..> 2023-08-25 15:39 2.8M
Apple-Location-Aware..> 2023-08-25 15:39 2.7M
Apple-Logic-Pro-9-TD..> 2023-08-25 15:39 2.9M
Apple-Logic9-examen-..> 2023-08-25 15:39 3.2M
Apple-Logic9-examen-..> 2023-08-25 15:39 3.2M
Apple-Mac-App-Progra..> 2023-08-25 15:39 2.7M
Apple-MacBook-Pro-Gu..> 2023-08-25 15:39 4.8M
Apple-MacBook_13inch..> 2023-08-25 15:39 3.7M
Apple-MacBook_13inch..> 2023-08-25 15:39 6.0M
Apple-MacBook_13inch..> 2023-08-25 15:39 6.0M
Apple-MacBook_Air_Gu..> 2021-01-28 14:36 3.5M
Apple-MacBook_Air_Us..> 2023-08-25 15:39 1.3M
Apple-MacBook_Air_Us..> 2023-08-25 15:39 1.3M
Apple-MacBook_Air_Us..> 2023-08-25 15:39 1.2M
Apple-MacBook_Early_..> 2023-08-25 15:39 4.4M
Apple-MacBook_Late20..> 2023-08-25 15:39 2.3M
Apple-MacBook_Late20..> 2023-08-25 15:39 2.3M
Apple-MacBook_Mid200..> 2023-08-25 15:39 2.7M
Apple-MacBook_Mid200..> 2023-08-25 15:39 2.7M
Apple-MacBook_Pro_Ea..> 2023-08-25 15:39 2.7M
Apple-MacBook_Pro_Ea..> 2023-08-25 15:39 2.6M
Apple-MacBook_Pro_Us..> 2023-08-25 15:39 2.8M
Apple-MacBook_UsersG..> 2023-08-25 15:39 1.5M
Apple-MacBook_UsersG..> 2023-08-25 15:39 1.5M
Apple-Mac_Pro_User_G..> 2023-08-25 15:39 3.1M
Apple-Mac_Pro_User_G..> 2023-08-25 15:39 3.1M
Apple-Mac_mini_Intel..> 2023-08-25 15:39 2.4M
Apple-Mac_mini_Intel..> 2023-08-25 15:39 2.4M
Apple-Mac_mini_Mid20..> 2023-08-25 15:39 3.0M
Apple-Mac_mini_Mid20..> 2023-08-25 15:39 3.0M
Apple-Macintosh-Perf..> 2023-08-25 15:39 4.2M
Apple-Macintosh-Perf..> 2023-08-25 15:39 4.2M
Apple-Macintosh-Perf..> 2023-08-25 15:39 2.7M
Apple-Macintosh-Perf..> 2023-08-25 15:39 4.0M
Apple-Macmini_Guide_..> 2023-08-25 15:39 3.2M
Apple-Nike_+_iPod_Us..> 2023-08-25 15:39 2.4M
Apple-Nike__iPod_Use..> 2023-08-25 15:39 2.5M
Apple-Numbers09_guid..> 2023-08-25 15:39 2.9M
Apple-Object-Oriente..> 2023-08-25 15:39 2.3M
Apple-Objective-C-Ru..> 2023-08-25 15:39 2.5M
Apple-OpenCL-Program..> 2023-08-25 15:39 1.7M
Apple-OpenGL-Program..> 2023-08-25 15:39 3.5M
Apple-PackageMaker_U..> 2023-08-25 15:39 1.0M
Apple-PackageMaker_U..> 2023-08-25 15:39 1.0M
Apple-Pages-Guide-de..> 2023-08-25 15:39 585K
Apple-Pages09_Guide_..> 2023-08-25 15:39 4.2M
Apple-Personal-Laser..> 2023-08-25 15:39 2.8M
Apple-Power-Macintos..> 2023-08-25 15:39 2.9M
Apple-Power-Macintos..> 2023-08-25 15:39 4.0M
Apple-Power-Macintos..> 2023-08-25 15:39 2.9M
Apple-Power-Macintos..> 2023-08-25 15:39 4.0M
Apple-Power-Macintos..> 2023-08-25 15:39 1.3M
Apple-PowerBook-G4-1..> 2023-08-25 15:39 2.8M
Apple-PowerBook-G4-1..> 2023-08-25 15:39 2.8M
Apple-PowerBook-User..> 2023-08-25 15:39 4.2M
Apple-PowerBookG4_1i..> 2023-08-25 15:39 4.8M
Apple-PowerBookG4_15..> 2023-08-25 15:39 4.8M
Apple-PowerMacG5_Use..> 2023-08-25 15:39 3.4M
Apple-PowerMacG5_Use..> 2023-08-25 15:39 6.1M
Apple-PowerMacG5_Use..> 2023-08-25 15:39 1.8M
Apple-PowerMacG_User..> 2023-08-25 15:39 3.4M
Apple-PowerMacG_User..> 2023-08-25 15:39 6.1M
Apple-PowerMacG_User..> 2023-08-25 15:39 1.9M
Apple-Preferences-an..> 2023-08-25 15:39 3.6M
Apple-QuickTake-100-..> 2023-08-25 15:39 2.9M
Apple-QuickTime7_Use..> 2023-08-25 15:39 2.4M
Apple-QuickTime7_Use..> 2023-08-25 15:39 2.4M
Apple-QuickTime71_Us..> 2023-08-25 15:39 1.3M
Apple-QuickTime71_Us..> 2023-08-25 15:39 1.3M
Apple-Remote-Desktop..> 2023-08-25 15:39 3.2M
Apple-Resource-Progr..> 2023-08-25 15:39 3.0M
Apple-SafariWebConte..> 2023-08-25 15:39 1.8M
Apple-SafariWebConte..> 2023-08-25 15:39 1.7M
Apple-Secure-Coding-..> 2023-08-25 15:39 1.9M
Apple-SharkUserGuide..> 2023-08-25 15:39 2.6M
Apple-SharkUserGuide..> 2023-08-25 15:39 2.6M
Apple-StoreKitGuide-..> 2023-08-25 15:39 1.9M
Apple-StoreKitGuide...> 2023-08-25 15:39 1.9M
Apple-Stream-Program..> 2023-08-25 15:39 3.1M
Apple-String-Program..> 2023-08-25 15:39 1.6M
Apple-Supplement_au_..> 2023-08-25 15:39 2.5M
Apple-Supplement_au_..> 2023-08-25 15:39 2.5M
Apple-TV_2nd_gen_Set..> 2023-08-25 15:39 2.6M
Apple-TV_2nd_gen_Set..> 2023-08-25 15:39 2.6M
Apple-TableView_iPho..> 2023-08-25 15:39 2.3M
Apple-TableView_iPho..> 2023-08-25 15:39 2.2M
Apple-Tiger_Guide_In..> 2023-08-25 15:39 1.9M
Apple-Tiger_Guide_In..> 2023-08-25 15:39 1.8M
Apple-TimeCapsule_Se..> 2023-08-25 15:39 1.9M
Apple-TimeCapsule_Se..> 2023-08-25 15:39 2.8M
Apple-TimeCapsule_Se..> 2023-08-25 15:39 2.8M
Apple-TimeCapsule_Se..> 2023-08-25 15:39 2.8M
Apple-TimeCapsule_Se..> 2023-08-25 15:39 2.8M
Apple-TimeCapsule_Se..> 2023-08-25 15:39 2.9M
Apple-TimeCapsule_Se..> 2023-08-25 15:39 2.8M
Apple-URL-Loading-Sy..> 2023-08-25 15:39 3.0M
Apple-Universal-Bina..> 2023-08-25 15:39 2.5M
Apple-User-s-Guide-M..> 2023-08-25 15:39 3.1M
Apple-View-Programmi..> 2023-08-25 15:39 3.2M
Apple-Windows-Guide-..> 2023-08-25 15:39 3.8M
Apple-Workgroup-Serv..> 2023-08-25 15:39 3.9M
Apple-Xcode_User_Gui..> 2023-08-25 15:39 6.6M
Apple-Xcode_User_Gui..> 2023-08-25 15:39 6.6M
Apple-XsanAdminGuide..> 2023-08-25 15:39 2.0M
Apple-XsanAdminGuide..> 2023-08-25 15:39 2.0M
Apple-Xsan_2_Admin_G..> 2023-08-25 15:39 2.5M
Apple-Xsan_2_Admin_G..> 2023-08-25 15:39 2.4M
Apple-Xserve--Apple-..> 2023-08-25 15:39 3.2M
Apple-Xserve-Apple-X..> 2023-08-25 15:39 3.3M
Apple-Xserve_2008_Gu..> 2023-08-25 15:39 2.2M
Apple-Xserve_Guide_d..> 2023-08-25 15:39 2.9M
Apple-Xserve_Guide_d..> 2023-08-25 15:39 2.8M
Apple-Xserve_Setup_G..> 2023-08-25 15:39 3.2M
Apple-Xserve_Setup_G..> 2023-08-25 15:39 3.1M
Apple-airmac_express..> 2023-08-25 15:38 3.0M
Apple-airmac_express..> 2023-08-25 15:38 3.0M
Apple-airportextreme..> 2023-08-25 15:38 2.1M
Apple-airportextreme..> 2023-08-25 15:38 2.1M
Apple-aluminumAppleK..> 2023-08-25 15:38 2.8M
Apple-aluminumAppleK..> 2023-08-25 15:38 2.8M
Apple-ard_admin_guid..> 2023-08-25 15:38 2.7M
Apple-ard_admin_guid..> 2023-08-25 15:38 2.7M
Apple-eMac_200UserGu..> 2023-08-25 15:38 2.6M
Apple-eMac_2005UserG..> 2023-08-25 15:38 2.6M
Apple-guide_de_confi..> 2023-08-25 15:38 3.1M
Apple-guide_de_confi..> 2023-08-25 15:38 3.1M
Apple-guide_de_l_uti..> 2023-08-25 15:38 3.9M
Apple-guide_de_l_uti..> 2023-08-25 15:38 3.9M
Apple-guide_des_fonc..> 2023-08-25 15:38 3.9M
Apple-guide_des_fonc..> 2023-08-25 15:38 3.9M
Apple-guide_des_fonc..> 2023-08-25 15:38 4.1M
Apple-guide_des_fonc..> 2023-08-25 15:38 4.1M
Apple-iBookG3_14inch..> 2023-08-25 15:38 1.7M
Apple-iBookG3_14inch..> 2023-08-25 15:38 1.7M
Apple-iBookG3_DualUS..> 2023-08-25 15:38 750K
Apple-iBookG3_DualUS..> 2023-08-25 15:38 734K
Apple-iMacG3_2002Mul..> 2023-08-25 15:38 782K
Apple-iMacG3_2002Mul..> 2023-08-25 15:38 766K
Apple-iMac_24inch_Ve..> 2023-08-25 15:38 2.9M
Apple-iMac_Guide_de_..> 2023-08-25 15:38 3.1M
Apple-iMac_Guide_de_..> 2023-08-25 15:38 3.0M
Apple-iOS-App-Progra..> 2023-08-25 15:38 1.5M
Apple-iPad-User-Guid..> 2023-08-25 15:38 3.5M
Apple-iPad-User-Guid..> 2023-08-25 15:38 3.5M
Apple-iPhone-5-Guide..> 2023-08-25 15:38 3.1M
Apple-iPhone-Guide-d..> 2023-08-25 15:38 3.1M
Apple-iPhone-OS-Ente..> 2023-08-25 15:38 2.4M
Apple-iPhone-User-Gu..> 2023-08-25 15:38 3.3M
Apple-iPhone_3G_Guid..> 2023-08-25 15:38 2.4M
Apple-iPhone_3G_Impo..> 2023-08-25 15:38 2.6M
Apple-iPhone_4_Deux_..> 2023-08-25 15:38 2.2M
Apple-iPhone_4_Deux_..> 2023-08-25 15:38 2.1M
Apple-iPhone_Finger_..> 2023-08-25 15:38 2.1M
Apple-iPhone_Finger_..> 2023-08-25 15:38 2.1M
Apple-iPhone_Finger_..> 2023-08-25 15:38 3.1M
Apple-iPhone_iOS3-1_..> 2023-08-25 15:38 3.4M
Apple-iPhone_iOS3.1_..> 2023-08-25 15:38 3.4M
Apple-iPod-mini-User..> 2023-08-25 15:38 3.2M
Apple-iPod-nano-Guid..> 2023-08-25 15:38 3.7M
Apple-iPod-nano-Guid..> 2023-08-25 15:38 3.7M
Apple-iPod-nano-Guid..> 2023-08-25 15:38 3.7M
Apple-iPod-nano-Guid..> 2023-08-25 15:38 3.4M
Apple-iPod-touch-Gui..> 2023-08-25 15:38 5.2M
Apple-iPod-touch-Gui..> 2023-08-25 15:38 5.2M
Apple-iPod_classic_1..> 2023-08-25 15:38 2.0M
Apple-iPod_classic_1..> 2023-08-25 15:38 2.0M
Apple-iPod_classic_1..> 2023-08-25 15:38 4.3M
Apple-iPod_classic_1..> 2023-08-25 15:38 3.3M
Apple-iPod_classic_1..> 2023-08-25 15:38 3.3M
Apple-iPod_mini_2nd_..> 2023-08-25 15:38 2.7M
Apple-iPod_mini_2nd_..> 2023-08-25 15:38 2.7M
Apple-iPod_nano_4th_..> 2023-08-25 15:38 1.9M
Apple-iPod_nano_4th_..> 2023-08-25 15:38 1.8M
Apple-iPod_nano_5th_..> 2023-08-25 15:38 1.8M
Apple-iPod_nano_6thg..> 2023-08-25 15:38 3.1M
Apple-iPod_nano_6thg..> 2023-08-25 15:38 3.4M
Apple-iPod_nano_6thg..> 2023-08-25 15:38 3.4M
Apple-iPod_nano_6thg..> 2023-08-25 15:39 1.7M
Apple-iPod_nano_6thg..> 2023-08-25 15:39 1.7M
Apple-iPod_nano_th_g..> 2023-08-25 15:39 1.9M
Apple-iPod_shuffle_4..> 2023-08-25 15:39 3.5M
Apple-iPod_shuffle_4..> 2023-08-25 15:39 3.5M
Apple-iPod_shuffle_4..> 2023-08-25 15:39 2.9M
Apple-iPod_shuffle_F..> 2023-08-25 15:39 2.2M
Apple-iPod_shuffle_F..> 2023-08-25 15:39 1.6M
Apple-iPod_shuffle_F..> 2023-08-25 15:39 1.6M
Apple-iPod_touch_2-0..> 2023-08-25 15:39 1.8M
Apple-iPod_touch_2-2..> 2023-08-25 15:39 2.0M
Apple-iPod_touch_2.0..> 2023-08-25 15:39 1.8M
Apple-iPod_touch_2.2..> 2023-08-25 15:39 2.0M
Apple-iSightUserGuid..> 2023-08-25 15:39 2.7M
Apple-iSightUserGuid..> 2023-08-25 15:39 2.6M
Apple-iTunes-Connect..> 2023-08-25 15:39 1.9M
Apple-iTunes_Extrasa..> 2023-08-25 15:39 1.5M
Apple-iTunes_Extrasa..> 2023-08-25 15:39 1.5M
Apple-iTunes_Videoan..> 2023-08-25 15:39 2.0M
Apple-iTunes_Videoan..> 2023-08-25 15:39 2.0M
Apple-imacdebut2006g..> 2023-08-25 15:38 2.9M
Apple-ipad_guide_de_..> 2023-08-25 15:38 3.9M
Apple-ipad_guide_de_..> 2023-08-25 15:38 3.8M
Apple-ipad_user_guid..> 2023-08-25 15:38 3.3M
Apple-ipad_user_guid..> 2023-08-25 15:38 4.6M
Apple-ipad_user_guid..> 2023-08-25 15:38 4.5M
Apple-ipad_user_guid..> 2023-08-25 15:38 4.9M
Apple-ipad_user_guid..> 2023-08-25 15:38 4.8M
Apple-iphone_4s_impo..> 2023-08-25 15:38 3.5M
Apple-iphone_bluetoo..> 2023-08-25 15:38 2.0M
Apple-iphone_bluetoo..> 2023-08-25 15:38 2.0M
Apple-iphone_guide_d..> 2023-08-25 15:38 3.6M
Apple-iphone_guide_d..> 2023-08-25 15:38 3.6M
Apple-iphone_ios5_gu..> 2023-08-25 15:38 2.8M
Apple-iphone_ios_gui..> 2023-08-25 15:38 2.8M
Apple-iphone_user_gu..> 2023-08-25 15:38 4.1M
Apple-iphone_user_gu..> 2023-08-25 15:38 4.0M
Apple-iphone_user_gu..> 2023-08-25 15:38 3.9M
Apple-iphone_user_gu..> 2023-08-25 15:38 3.9M
Apple-iphone_user_gu..> 2023-08-25 15:38 3.7M
Apple-ipod_classic_f..> 2023-08-25 15:38 2.7M
Apple-ipod_classic_f..> 2023-08-25 15:38 2.7M
Apple-ipod_nano_3rd_..> 2023-08-25 15:38 2.2M
Apple-ipod_nano_3rd_..> 2023-08-25 15:38 2.1M
Apple-ipod_shuffle_f..> 2023-08-25 15:39 2.8M
Apple-ipod_shuffle_f..> 2023-08-25 15:39 1.9M
Apple-ipod_touch_fea..> 2023-08-25 15:39 1.7M
Apple-ipod_touch_fea..> 2023-08-25 15:39 1.7M
Apple-ipod_touch_use..> 2023-08-25 15:39 4.5M
Apple-ipod_touch_use..> 2023-08-25 15:39 3.3M
Apple-ipod_touch_use..> 2023-08-25 15:39 3.1M
Apple-livetype_2_use..> 2023-08-25 15:39 2.1M
Apple-livetype_2_use..> 2023-08-25 15:39 2.0M
Apple-macbook_air-11..> 2023-08-25 15:39 2.4M
Apple-macbook_air_gu..> 2023-08-25 15:39 4.6M
Apple-macbook_air_us..> 2023-08-25 15:39 2.8M
Apple-macbook_air_us..> 2023-08-25 15:39 2.8M
Apple-macbook_pro-1-..> 2023-08-25 15:39 3.1M
Apple-macbook_pro-15..> 2023-08-25 15:39 3.1M
Apple-multimediaprog..> 2023-08-25 15:39 3.0M
Apple-multimediaprog..> 2023-08-25 15:39 3.0M
Apple-nikeipod_guide..> 2023-08-25 15:39 3.2M
Apple-nikeipod_users..> 2023-08-25 15:39 1.3M
Apple-nikeipod_users..> 2023-08-25 15:39 1.3M
ApplePowerMacG5_(Ear..> 2023-08-25 15:39 2.8M
ApplePowerMacG_Early..> 2023-08-25 15:39 2.8M
AppleSafariVisualEff..> 2023-08-25 15:39 3.0M
AppleSafariVisualEff..> 2023-08-25 15:39 2.9M
AppleTV_SetupGuide-G..> 2023-08-25 15:39 3.6M
Apple_Guide_de_l_uti..> 2023-08-25 15:39 2.8M
Apple_TV_2e_gen_Guid..> 2023-08-25 15:39 2.4M
Apple_TV_2nd_gen_Set..> 2023-08-25 15:39 2.3M
Apple_Xserve_Diagnos..> 2021-01-28 14:37 3.4M
Apple_iPod_touch_Use..> 2023-08-25 15:39 3.7M
Apple_ipad_user_guid..> 2023-08-25 15:39 3.5M
Apple_iphone_4s_fing..> 2023-08-25 15:39 2.9M
Apple_iphone_4s_fing..> 2023-08-25 15:39 2.6M
Apple_ipod_touch_use..> 2023-08-25 15:39 2.3M
Archos_3cam_vision_U..> 2023-08-25 15:39 90K
Archos_3cam_vision_U..> 2023-08-25 15:39 90K
Archos_3cam_vision_U..> 2023-08-25 15:39 90K
Archos_3cam_vision_U..> 2023-08-25 15:39 90K
Archos_3cam_vision_U..> 2023-08-25 15:39 90K
Archos_7_ht_User_Gui..> 2023-08-25 15:39 90K
Archos_7_ht_User_Gui..> 2023-08-25 15:39 90K
Archos_8_ht_User_Gui..> 2023-08-25 15:39 90K
Archos_43_vision_Use..> 2023-08-25 15:39 90K
Archos_43_vision_Use..> 2023-08-25 15:39 90K
Archos_43_vision_Use..> 2023-08-25 15:39 90K
Archos_43_vision_Use..> 2023-08-25 15:39 90K
Archos_43_vision_Use..> 2023-08-25 15:39 90K
Aspire-20Generic-20U..> 2023-08-25 15:39 44K
BA01_User_Guide_Fre_..> 2023-08-25 15:39 44K
Bewan-Guide-d'instal..> 2023-08-25 15:39 84K
Bewan-Guide-de-d_mar..> 2023-08-25 15:39 84K
Bewan-Guide-de-l'uti..> 2023-08-25 15:39 84K
Bewan-Guide-de-l'uti..> 2023-08-25 15:39 84K
Bewan-Guide-de-l'uti..> 2023-08-25 15:39 84K
Bewan-Lidhome_guide_..> 2023-08-25 15:39 84K
Bewan-bewan-ibox-gui..> 2023-08-25 15:39 84K
Bewan-guide_adslv2.p..> 2023-08-25 15:39 84K
Bewan-guide_clef_wif..> 2023-08-25 15:39 84K
Bewan-guide_installa..> 2023-08-25 15:39 84K
Bewan-guide_kit_cpl...> 2023-08-25 15:39 84K
Bewan-guide_utilisat..> 2023-08-25 15:39 84K
Big-Data-Telecharger..> 2023-08-25 15:39 4.4M
BlackBerry_Storm2_Se..> 2021-01-30 16:36 547K
BrazilNFReferenceGui..> 2023-08-25 15:39 109K
BrazilNFReferenceGui..> 2023-08-25 15:39 109K
Brodit-support-dinst..> 2023-08-25 15:39 605K
Brother-GUIDE-D-INST..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 686K
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 4.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 686K
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 4.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 686K
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 4.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 686K
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 4.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.1M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.6M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 4.6M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 957K
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 957K
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 2.5M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.4M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.4M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 544K
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.9M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 2.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 544K
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.9M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 2.2M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 4.6M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 4.6M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 284K
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.3M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.6M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 284K
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.3M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.6M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.4M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.4M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 1.4M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.0M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.2M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 2.8M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.7M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.1M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.4M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 4.4M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.3M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 5.3M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2023-08-25 15:39 3.7M
Brother-GUIDE-DE-L-U..> 2021-02-11 14:43 5.3M
Brother-GUIDE-DE-REF..> 2023-08-25 15:39 3.2M
Brother-GUIDE-DE-REF..> 2023-08-25 15:40 3.2M
Brother-GUIDE-DE-REF..> 2023-08-25 15:40 3.2M
Brother-GUIDE-DE-REF..> 2023-08-25 15:40 3.2M
Brother-GUIDE-DE-REF..> 2023-08-25 15:40 3.2M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-DE L-U..> 2023-08-25 15:39 3.5M
Brother-GUIDE-UTILIS..> 2023-08-25 15:40 3.2M
Business-Talk-IP-SIP..> 2023-08-25 15:40 109K
C11-654649-00__CIO_S..> 2023-08-25 15:40 109K
CCNA20-India-UserGui..> 2023-08-25 15:40 109K
CE7021-COOKEO-GUIDE-..> 2023-08-25 15:40 604K
CHAPTER-6-1-System-A..> 2023-08-25 15:40 5.1M
CIEL-2011-MonCompte-..> 2023-08-25 15:40 2.6M
CIEL-Ciel_Guide_de_r..> 2023-08-25 15:40 3.9M
CIEL-Ciel_Guide_de_r..> 2023-08-25 15:40 90K
CIEL-Ciel_Guide_de_r..> 2023-08-25 15:40 4.4M
CIEL-Ciel_Guide_de_r..> 2023-08-25 15:40 90K
CIEL-Compta_ComptaEv..> 2023-08-25 15:40 90K
CIEL-GuideEchanges.p..> 2023-08-25 15:40 90K
CIEL-Guide_de_refere..> 2023-08-25 15:40 2.4M
CIEL-Guide_de_refere..> 2023-08-25 15:40 90K
CIEL-Le-Guide-des-ec..> 2023-08-25 15:40 90K
CIEL-_Guide_de_refer..> 2023-08-25 15:40 2.6M
CIEL-documentation-A..> 2023-08-25 15:40 90K
CIEL-documentation-A..> 2023-08-25 15:40 90K
CIEL-documentation-A..> 2023-08-25 15:40 90K
CIEL-documentation-C..> 2023-08-25 15:40 90K
CIEL-documentation-C..> 2023-08-25 15:40 90K
CIEL-documentation-C..> 2023-08-25 15:40 90K
CIEL-documentation-D..> 2023-08-25 15:40 90K
CIEL-documentation-F..> 2023-08-25 15:40 90K
CIEL-documentation-F..> 2023-08-25 15:40 90K
CIEL-documentation-I..> 2023-08-25 15:40 90K
CIEL-documentation-I..> 2023-08-25 15:40 90K
CIEL-documentation-I..> 2023-08-25 15:40 90K
CIEL-documentation-P..> 2023-08-25 15:40 90K
CIEL-documentation-P..> 2023-08-25 15:40 90K
CIEL-documentation-g..> 2023-08-25 15:40 90K
CISCO-VALIDATED-DESI..> 2023-08-25 15:40 3.1M
CUACA_user_guide_FRA..> 2023-08-25 15:40 109K
CVD-ApplicationOptim..> 2023-08-25 15:40 109K
CVD-Campus-LAN-WLAN-..> 2023-08-25 15:40 109K
CVD-CampusCleanAirDe..> 2023-08-25 15:40 109K
CVD-CampusCleanAirDe..> 2023-08-25 15:40 109K
CVD-CampusCleanAirDe..> 2023-08-25 15:40 109K
CVD-CampusDot1XDesig..> 2023-08-25 15:40 109K
CVD-CampusWiredLANDe..> 2023-08-25 15:40 109K
CVD-CampusWiredLANDe..> 2023-08-25 15:40 109K
CVD-CampusWiredLANDe..> 2023-08-25 15:40 109K
CVD-CampusWirelessLA..> 2023-08-25 15:40 109K
CVD-CampusWirelessLA..> 2023-08-25 15:40 109K
CVD-CampusWirelessLA..> 2023-08-25 15:40 109K
CVD-CiscoOfficeExten..> 2023-08-25 15:40 109K
CVD-CiscoOfficeExten..> 2023-08-25 15:40 109K
CVD-CiscoOfficeExten..> 2023-08-25 15:40 109K
CVD-CloudWebSecurity..> 2023-08-25 15:40 109K
CVD-DataCenterDesign..> 2023-08-25 15:40 109K
CVD-DataCenterDesign..> 2023-08-25 15:40 109K
CVD-DeviceManagement..> 2023-08-25 15:40 109K
CVD-DeviceManagement..> 2023-08-25 15:40 109K
CVD-DeviceManagement..> 2023-08-25 15:40 109K
CVD-IWAN-DIADesignGu..> 2023-08-25 15:40 109K
CVD-IWANDesignGuide-..> 2023-08-25 15:40 109K
CVD-NetworkAnalysisM..> 2023-08-25 15:40 109K
CVD-NetworkAnalysisM..> 2023-08-25 15:40 109K
CVD-NetworkAnalysisM..> 2023-08-25 15:40 109K
CVD-PrimeInfrastruct..> 2023-08-25 15:40 109K
CVD-PrimeInfrastruct..> 2023-08-25 15:40 109K
CVD-PrimeInfrastruct..> 2023-08-25 15:40 109K
CVD-ServerRoomDesign..> 2023-08-25 15:40 109K
CVD-ServerRoomDesign..> 2023-08-25 15:40 109K
CVD-Software-Defined..> 2023-08-25 15:40 109K
CVD-Software-Defined..> 2023-08-25 15:40 109K
CVD-Software-Defined..> 2023-08-25 15:40 109K
CVD-UnifiedComputing..> 2023-08-25 15:40 109K
CVD-UnifiedComputing..> 2023-08-25 15:40 109K
CVD-VirtualizationWi..> 2023-08-25 15:40 109K
CVD-VirtualizationWi..> 2023-08-25 15:40 109K
Carte-d-interface-te..> 2023-08-25 15:40 2.7M
Catalyst-4500-Series..> 2023-08-25 15:40 109K
Ciel-2011-MonCompte-..> 2023-08-25 15:40 6.7M
Ciel-Compta_ComptaEv..> 2023-08-25 15:40 4.6M
Ciel-Le-Guide-des-ec..> 2023-08-25 15:40 2.5M
Ciel-documentation-A..> 2023-08-25 15:40 5.1M
Ciel-documentation-A..> 2023-08-25 15:40 6.5M
Ciel-documentation-A..> 2023-08-25 15:40 6.6M
Ciel-documentation-C..> 2023-08-25 15:40 6.0M
Ciel-documentation-C..> 2023-08-25 15:40 5.8M
Ciel-documentation-C..> 2023-08-25 15:40 5.7M
Ciel-documentation-D..> 2023-08-25 15:40 5.4M
Ciel-documentation-F..> 2023-08-25 15:40 5.0M
Ciel-documentation-F..> 2023-08-25 15:40 6.5M
Ciel-documentation-I..> 2023-08-25 15:40 6.2M
Ciel-documentation-I..> 2023-08-25 15:40 6.3M
Ciel-documentation-I..> 2023-08-25 15:40 5.3M
Ciel-documentation-P..> 2023-08-25 15:40 5.4M
Ciel-documentation-P..> 2023-08-25 15:40 5.3M
Ciel-documentation-g..> 2023-08-25 15:40 6.4M
Cisco-836-Router-and..> 2023-08-25 15:40 1.6M
Cisco-837-Router-and..> 2023-08-25 15:40 1.6M
Cisco-4000-Series-IS..> 2023-08-25 15:40 16M
Cisco-ASR-9000-Serie..> 2023-08-25 15:40 4.4M
Cisco-ASR-9000-Serie..> 2023-08-25 15:40 5.7M
Cisco-ASR-9000-Serie..> 2023-08-25 15:40 5.9M
Cisco-ASR-9000-Serie..> 2023-08-25 15:40 5.0M
Cisco-ASR-9000-Serie..> 2023-08-25 15:40 3.7M
Cisco-ASR-9000-Serie..> 2023-08-25 15:40 3.5M
Cisco-ASR-9000-Serie..> 2023-08-25 15:40 4.1M
Cisco-IOS-Dial-Techn..> 2023-08-25 15:40 2.2M
Cisco-IOS-XR-Carrier..> 2023-08-25 15:40 4.5M
Cisco-IOS-XR-XML-API..> 2023-08-25 15:40 4.7M
Cisco-Meeting-Server..> 2023-08-25 15:40 109K
Cisco-ONS-15454-DWDM..> 2023-08-25 15:40 4.9M
Cisco-Prime-Network-..> 2023-08-25 15:40 1.7M
Cisco-Unified-Commun..> 2023-08-25 15:40 5.7M
CiscoDataCenterCerti..> 2023-08-25 15:40 109K
CiscoPrimeNetwork-Us..> 2023-08-25 15:40 109K
Citation-Guide201020..> 2021-02-03 10:07 73K
Comprend---câble-de..> 2023-08-25 15:40 591K
Comprend---câble-de..> 2023-08-25 15:40 591K
Comprend---câble-de..> 2023-08-25 15:40 591K
Comprend---câble-de..> 2023-08-25 15:40 591K
Comprend---câble-de-..> 2023-08-25 15:40 596K
Comprend---câble-de-..> 2023-08-25 15:40 596K
Comprend---câble-de-..> 2023-08-25 15:40 596K
Comprend---câble-de-..> 2023-08-25 15:40 596K
Configuration-et-cab..> 2023-08-25 15:40 46K
Crucial-Data-Transfe..> 2023-08-25 15:40 8.1M
Crucial-Guide-pour-l..> 2023-08-25 15:40 8.1M
Crucial-Guide-pratiq..> 2023-08-25 15:40 8.1M
Crucial-Guide-pratiq..> 2023-08-25 15:40 8.0M
Customer-Journey-Ana..> 2023-08-25 15:40 4.9M
DELL-Alienware-Alpha..> 2023-08-25 15:40 2.5M
DELL-Alienware-Alpha..> 2023-08-25 15:40 2.5M
DELL-Manuel-techniqu..> 2023-08-25 15:40 4.5M
DELL-Manuel-techniqu..> 2023-08-25 15:40 4.2M
DELL-Manuel-techniqu..> 2023-08-25 15:40 4.3M
DELL-Manuel-techniqu..> 2023-08-25 15:40 4.5M
DELL-Manuel-techniqu..> 2023-08-25 15:40 4.6M
DELL-Manuel-techniqu..> 2023-08-25 15:40 4.4M
DELL-Manuels-et-docu..> 2023-08-25 15:40 2.7M
DELL-Manuels-et-docu..> 2023-08-25 15:40 2.7M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.0M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.2M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.6M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.6M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.5M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.6M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.6M
DELL-Manuels-et-docu..> 2023-08-25 15:40 3.4M
DELL-OPTIPLEX580-TEC..> 2023-08-25 15:40 2.9M
DELL-POWERVAULT-MD12..> 2023-08-25 15:40 3.3M
DEVELOP-IN-SWIFT-Gui..> 2023-08-25 15:40 70K
Dell-1130-Dell-1130n..> 2023-08-25 15:40 3.1M
Dell-1250c-Color-Pri..> 2023-08-25 15:40 3.0M
Dell-1420x_Setup-Gui..> 2023-08-25 15:40 3.2M
Dell-2145cn-Impriman..> 2023-08-25 15:40 3.6M
Dell-4220_User's-Gui..> 2023-08-25 15:40 3.3M
Dell-Adaptateur-hote..> 2023-08-25 15:40 2.3M
Dell-Adaptateurs-Del..> 2023-08-25 15:40 3.9M
Dell-Adaptateurs-Del..> 2023-08-25 15:40 3.1M
Dell-Axim-X3-Guide-d..> 2023-08-25 15:40 3.4M
Dell-Bandotheques-De..> 2023-08-25 15:40 2.2M
Dell-Carte-de-Gestio..> 2023-08-25 15:40 2.0M
Dell-Cartes-controle..> 2023-08-25 15:40 2.1M
Dell-Commutateur-de-..> 2023-08-25 15:40 2.3M
Dell-Controleurs-Del..> 2023-08-25 15:40 2.9M
Dell-Controleurs-RAI..> 2023-08-25 15:40 3.4M
Dell-DX-Object-Stora..> 2023-08-25 15:40 2.8M
Dell-E-Legacy-Extend..> 2023-08-25 15:40 2.8M
Dell-FluidFS-NAS-Sol..> 2023-08-25 15:40 2.1M
Dell-FluidFS-NAS-Sol..> 2023-08-25 15:40 3.0M
Dell-FluidFS-NAS-Sol..> 2023-08-25 15:40 1.7M
Dell-Guide-Utilisate..> 2023-08-25 15:40 2.5M
Dell-Guide-d-install..> 2023-08-25 15:40 2.1M
Dell-Guide-d-install..> 2023-08-25 15:40 2.9M
Dell-Guide-d-install..> 2023-08-25 15:40 2.8M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 2.4M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 2.5M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 3.0M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 3.4M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 2.8M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 4.1M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 3.6M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 4.1M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 4.1M
Dell-Guide-d-utilisa..> 2023-08-25 15:40 4.2M
Dell-Guide-de-config..> 2023-08-25 15:40 3.0M
Dell-Guide-de-demarr..> 2023-08-25 15:40 2.9M
Dell-Guide-de-l-Util..> 2023-08-25 15:40 3.5M
Dell-Guide-de-l-admi..> 2023-08-25 15:40 2.2M
Dell-Guide-de-l-util..> 2023-08-25 15:40 2.1M
Dell-Guide-de-l-util..> 2023-08-25 15:40 3.2M
Dell-Guide-de-l-util..> 2023-08-25 15:40 4.2M
Dell-Guide-de-l-util..> 2023-08-25 15:40 3.5M
Dell-Guide-de-l-util..> 2023-08-25 15:40 1.9M
Dell-Guide-de-l-util..> 2023-08-25 15:40 3.1M
Dell-Guide-de-l-util..> 2023-08-25 15:40 2.0M
Dell-Guide-de-l-util..> 2023-08-25 15:40 3.0M
Dell-Guide-de-soluti..> 2023-08-25 15:40 3.8M
Dell-Guide-technique..> 2023-08-25 15:40 3.2M
Dell-HBA-SAS-Dell-Po..> 2023-08-25 15:40 2.9M
Dell-INSPIRON-DUO-GU..> 2023-08-25 15:40 2.2M
Dell-INSPIRON-DUO-SE..> 2023-08-25 15:40 2.3M
Dell-INSPIRON-GUIDE-..> 2023-08-25 15:40 3.0M
Dell-INSPIRON-GUIDE-..> 2023-08-25 15:40 2.4M
Dell-INSPIRON-Setup-..> 2023-08-25 15:40 2.3M
Dell-Imprimante-lase..> 2023-08-25 15:40 2.9M
Dell-Inspiron-300m-G..> 2023-08-25 15:40 2.0M
Dell-Inspiron-8500-G..> 2023-08-25 15:40 4.1M
Dell-Inspiron-8600-G..> 2023-08-25 15:40 2.7M
Dell-Inspiron-Guide-..> 2023-08-25 15:40 1.3M
Dell-Integrated-Dell..> 2023-08-25 15:40 3.1M
Dell-Laser-MFP-Dell-..> 2023-08-25 15:40 3.2M
Dell-Latitude-D430-G..> 2023-08-25 15:40 4.4M
Dell-Latitude-D430-G..> 2023-08-25 15:40 3.2M
Dell-Latitude-D531-G..> 2023-08-25 15:40 4.7M
Dell-Latitude-D830-G..> 2023-08-25 15:40 2.2M
Dell-Latitude-E4300-..> 2023-08-25 15:40 2.3M
Dell-Latitude-E5400-..> 2023-08-25 15:40 4.8M
Dell-Latitude-E6400-..> 2023-08-25 15:40 3.2M
Dell-Latitude-E6420-..> 2023-08-25 15:40 3.0M
Dell-Latitude-E6500-..> 2023-08-25 15:40 3.3M
Dell-Lifecycle-Contr..> 2023-08-25 15:40 3.5M
Dell-Management-Plug..> 2023-08-25 15:40 2.5M
Dell-Matrices-de-sto..> 2023-08-25 15:40 2.2M
Dell-Matrices-de-sto..> 2023-08-25 15:40 4.9M
Dell-Matrices-de-sto..> 2023-08-25 15:40 3.0M
Dell-Matrices-de-sto..> 2023-08-25 15:40 3.2M
Dell-Matrices-de-sto..> 2023-08-25 15:40 3.7M
Dell-Matrices-de-sto..> 2023-08-25 15:40 3.7M
Dell-Matrices-de-sto..> 2023-08-25 15:40 1.9M
Dell-Matrices-de-sto..> 2023-08-25 15:40 2.1M
Dell-Matrices-de-sto..> 2023-08-25 15:40 3.4M
Dell-Media-Center-Gu..> 2023-08-25 15:40 1.6M
Dell-Micrologiciel-D..> 2023-08-25 15:40 2.9M
Dell-Micrologiciel-D..> 2023-08-25 15:40 2.9M
Dell-Module-de-venti..> 2023-08-25 15:40 2.0M
Dell-Modules-optique..> 2023-08-25 15:40 1.9M
Dell-Moniteur-a-Dell..> 2023-08-25 15:40 3.6M
Dell-Moniteur-a-Dell..> 2023-08-25 15:40 3.1M
Dell-Moniteur-a-ecra..> 2023-08-25 15:40 3.3M
Dell-OPENMANAGE-POWE..> 2023-08-25 15:40 2.0M
Dell-OPENMANAGE-POWE..> 2023-08-25 15:40 2.7M
Dell-Onduleur-en-Bai..> 2023-08-25 15:40 2.7M
Dell-OpenManage-Remo..> 2023-08-25 15:40 4.9M
Dell-OpenManage-Serv..> 2023-08-25 15:40 3.3M
Dell-OpenManage-Serv..> 2023-08-25 15:40 3.7M
Dell-OpenManage-Serv..> 2023-08-25 15:40 3.4M
Dell-OpenManage-Serv..> 2023-08-25 15:40 3.3M
Dell-OpenManage-Serv..> 2023-08-25 15:40 3.7M
Dell-OpenManage-Serv..> 2023-08-25 15:40 3.7M
Dell-OpenManage-Serv..> 2023-08-25 15:40 5.0M
Dell-OptiPlex-360-Gu..> 2023-08-25 15:40 3.5M
Dell-OptiPlex-755-Gu..> 2023-08-25 15:40 5.7M
Dell-P513w-User-s-Gu..> 2023-08-25 15:40 2.3M
Dell-P513w-User-s-Gu..> 2023-08-25 15:40 2.8M
Dell-PERC-6-i-PERC-6..> 2023-08-25 15:40 3.8M
Dell-PERC-6-i-PERC-6..> 2023-08-25 15:40 4.1M
Dell-Photo-Printer-5..> 2023-08-25 15:40 2.6M
Dell-Point-d-acces-D..> 2023-08-25 15:40 2.5M
Dell-Points-d-acces-..> 2023-08-25 15:40 2.0M
Dell-PowerConnect-55..> 2023-08-25 15:40 3.8M
Dell-PowerEdge-2950-..> 2023-08-25 15:40 1.9M
Dell-PowerEdge-C410x..> 2023-08-25 15:40 3.3M
Dell-PowerEdge-Expan..> 2023-08-25 15:40 3.5M
Dell-PowerEdge-Expre..> 2023-08-25 15:40 1.7M
Dell-PowerEdge-M1000..> 2023-08-25 15:40 3.7M
Dell-PowerEdge-R210-..> 2023-08-25 15:40 3.6M
Dell-PowerEdge-R320-..> 2023-08-25 15:40 1.6M
Dell-PowerEdge-R415-..> 2023-08-25 15:40 1.7M
Dell-PowerEdge-R420-..> 2023-08-25 15:40 2.5M
Dell-PowerEdge-R520-..> 2023-08-25 15:40 3.3M
Dell-PowerEdge-R620-..> 2023-08-25 15:40 3.4M
Dell-PowerEdge-R710-..> 2023-08-25 15:40 1.9M
Dell-PowerEdge-R720-..> 2023-08-25 15:40 2.5M
Dell-PowerEdge-R720-..> 2023-08-25 15:40 2.0M
Dell-PowerEdge-R820-..> 2023-08-25 15:40 2.0M
Dell-PowerEdge-RAID-..> 2023-08-25 15:40 2.4M
Dell-PowerEdge-RAID-..> 2023-08-25 15:40 2.4M
Dell-PowerEdge-RAID-..> 2023-08-25 15:40 3.2M
Dell-PowerEdge-T320-..> 2023-08-25 15:40 2.9M
Dell-PowerEdge-T420-..> 2023-08-25 15:40 2.1M
Dell-PowerEdge-T620-..> 2023-08-25 15:40 2.8M
Dell-PowerVault-DL-B..> 2023-08-25 15:40 2.6M
Dell-PowerVault-Data..> 2023-08-25 15:40 2.0M
Dell-PowerVault-Data..> 2023-08-25 15:40 2.6M
Dell-PowerVault-Data..> 2023-08-25 15:40 2.7M
Dell-PowerVault-Encr..> 2023-08-25 15:40 2.5M
Dell-PowerVault-MD-S..> 2023-08-25 15:40 1.7M
Dell-PowerVault-MD11..> 2023-08-25 15:40 2.0M
Dell-PowerVault-MD32..> 2023-08-25 15:40 1.7M
Dell-PowerVault-MD32..> 2023-08-25 15:40 2.0M
Dell-PowerVault-MD32..> 2023-08-25 15:40 1.8M
Dell-PowerVault-MD32..> 2023-08-25 15:40 2.8M
Dell-PowerVault-MD32..> 2023-08-25 15:40 3.4M
Dell-PowerVault-NX20..> 2023-08-25 15:40 2.0M
Dell-PowerVault-NX40..> 2023-08-25 15:40 3.2M
Dell-Precision-M4400..> 2023-08-25 15:40 1.5M
Dell-Precision-M6400..> 2023-08-25 15:40 2.1M
Dell-Projecteur-7700..> 2023-08-25 15:40 2.2M
Dell-Projecteur-Dell..> 2023-08-25 15:40 2.0M
Dell-Projecteur-Dell..> 2023-08-25 15:40 1.8M
Dell-Projecteur-Dell..> 2023-08-25 15:40 1.8M
Dell-SAS-RAID-Storag..> 2023-08-25 15:40 2.2M
Dell-Server-Deployme..> 2023-08-25 15:40 3.7M
Dell-Server-PRO-Mana..> 2023-08-25 15:40 2.0M
Dell-Serveur-de-sauv..> 2023-08-25 15:40 1.9M
Dell-Storage-Center-..> 2023-08-25 15:40 3.7M
Dell-Storage-Center-..> 2023-08-25 15:40 2.7M
Dell-Studio-GUIDE-DE..> 2023-08-25 15:40 5.5M
Dell-Studio-One-GUID..> 2023-08-25 15:40 1.5M
Dell-Studio-XPS-GUID..> 2023-08-25 15:40 2.3M
Dell-Studio-XPS-Guid..> 2023-08-25 15:40 2.9M
Dell-Studio-XPS-Setu..> 2023-08-25 15:40 2.4M
Dell-Studio-XPS-Setu..> 2023-08-25 15:40 1.3M
Dell-Systeme-Dell-DR..> 2023-08-25 15:40 3.6M
Dell-Systeme-Dell-Po..> 2023-08-25 15:40 3.4M
Dell-Systemes-Dell-P..> 2023-08-25 15:40 2.9M
Dell-Systemes-Dell-P..> 2023-08-25 15:40 3.1M
Dell-Systemes-Dell-P..> 2023-08-25 15:40 1.9M
Dell-Systemes-Dell-P..> 2023-08-25 15:40 3.0M
Dell-Systemes-Dell-P..> 2023-08-25 15:40 2.4M
Dell-Systemes-Dell-P..> 2023-08-25 15:40 3.2M
Dell-Systemes-Dell-P..> 2023-08-25 15:40 2.7M
Dell-Systems-Service..> 2023-08-25 15:40 3.1M
Dell-Update-Packages..> 2023-08-25 15:40 1.9M
Dell-Utilitaires-de-..> 2023-08-25 15:40 4.1M
Dell-Vostro-410-Guid..> 2023-08-25 15:40 2.5M
Dell-Vostro-420-220-..> 2023-08-25 15:40 2.1M
Dell-Vostro-1310-151..> 2023-08-25 15:40 1.6M
Dell-Vostro-1310-151..> 2023-08-25 15:40 2.6M
Dell-XPS-430-Guide-d..> 2023-08-25 15:40 2.4M
Dell-XPS-GUIDE-DE-CO..> 2023-08-25 15:40 2.1M
Dell-XPS-One-GUIDE-D..> 2023-08-25 15:40 2.2M
Dell-alienware-auror..> 2023-08-25 15:40 2.6M
Dell-poweredge-r210-..> 2023-08-25 15:40 2.5M
Dell-poweredge-r520-..> 2023-08-25 15:40 2.7M
Dell-server-poweredg..> 2023-08-25 15:40 2.9M
Dell-server-poweredg..> 2023-08-25 15:40 2.5M
Dell-server-poweredg..> 2023-08-25 15:40 1.9M
Dell-server-poweredg..> 2023-08-25 15:40 2.6M
Dell-server-poweredg..> 2023-08-25 15:40 2.4M
Dell-server-poweredg..> 2023-08-25 15:40 2.3M
Dell-xps-13-l321x_se..> 2023-08-25 15:40 1.9M
E960E-Cheveux-et-Bar..> 2023-08-25 15:40 604K
EBP-Batiment-Pour-Wi..> 2023-08-25 15:40 1.8M
EBP-Business-Plan-Gu..> 2023-08-25 15:40 8.9M
EBP-Business-Plan-Po..> 2023-08-25 15:40 2.7M
EBP-CRM-Ligne-PME-Op..> 2023-08-25 15:40 2.1M
EBP-Compta-Pour-Wind..> 2023-08-25 15:40 2.3M
EBP-Compta-Pratic-Po..> 2023-08-25 15:40 2.1M
EBP-Comptabilite-pou..> 2023-08-25 15:40 1.7M
EBP-Comptabilite-pou..> 2023-08-25 15:40 1.3M
EBP-Devis-Facturatio..> 2023-08-25 15:40 1.7M
EBP-Devis-et-Factura..> 2023-08-25 15:40 2.7M
EBP-EBP_Paye_V18_Gui..> 2023-08-25 15:40 2.3M
EBP-GUIDE-DES-LOGICI..> 2023-08-25 15:40 426K
EBP-Guide_Analyses_e..> 2023-08-25 15:40 1.3M
EBP-Guide_Analyses_e..> 2023-08-25 15:40 3.8M
EBP-Guide_Auto-entre..> 2023-08-25 15:40 88K
EBP-Guide_Auto-entre..> 2023-08-25 15:40 4.1M
EBP-Guide_Batiment_2..> 2023-08-25 15:40 2.2M
EBP-Guide_Batiment_2..> 2023-08-25 15:40 2.7M
EBP-Guide_BusinessPl..> 2023-08-25 15:40 1.9M
EBP-Guide_BusinessPl..> 2023-08-25 15:40 2.9M
EBP-Guide_CRM_Classi..> 2023-08-25 15:40 3.4M
EBP-Guide_CRM_PME_20..> 2023-08-25 15:40 2.4M
EBP-Guide_CRM_PRO_20..> 2023-08-25 15:40 2.7M
EBP-Guide_Compta_Ass..> 2023-08-25 15:40 3.3M
EBP-Guide_Compta_Ass..> 2023-08-25 15:40 1.8M
EBP-Guide_Compta_Cla..> 2023-08-25 15:40 2.8M
EBP-Guide_Compta_Cla..> 2023-08-25 15:40 1.6M
EBP-Guide_Compta_Lib..> 2023-08-25 15:40 3.2M
EBP-Guide_Compta_des..> 2023-08-25 15:40 749K
EBP-Guide_Devis_Bati..> 2023-08-25 15:40 1.4M
EBP-Guide_Devis_Fact..> 2023-08-25 15:40 8.1M
EBP-Guide_Devis__Fac..> 2023-08-25 15:40 4.0M
EBP-Guide_Devis_et_F..> 2023-08-25 15:40 2.3M
EBP-Guide_Devis_et_F..> 2023-08-25 15:40 3.4M
EBP-Guide_Devis_et_F..> 2023-08-25 15:40 2.8M
EBP-Guide_EBP_Compta..> 2023-08-25 15:40 3.9M
EBP-Guide_EBP_Devis-..> 2023-08-25 15:40 1.5M
EBP-Guide_EBP_Gestio..> 2023-08-25 15:40 1.5M
EBP-Guide_EBP_PayeLi..> 2023-08-25 15:40 3.3M
EBP-Guide_EtatsFi_En..> 2023-08-25 15:40 1.6M
EBP-Guide_EtatsFi_Li..> 2023-08-25 15:40 1.5M
EBP-Guide_Gestion_Ba..> 2023-08-25 15:40 551K
EBP-Guide_Gestion_Co..> 2023-08-25 15:40 3.6M
EBP-Guide_Gestion_Co..> 2023-08-25 15:40 2.0M
EBP-Guide_Gestion_Co..> 2023-08-25 15:40 2.2M
EBP-Guide_Gestion_Li..> 2023-08-25 15:40 9.1M
EBP-Guide_Gestion_Li..> 2023-08-25 15:40 2.6M
EBP-Guide_Gestion_Li..> 2023-08-25 15:40 2.6M
EBP-Guide_Immobilisa..> 2023-08-25 15:40 1.6M
EBP-Guide_Immobilisa..> 2023-08-25 15:40 3.5M
EBP-Guide_Liasse_Fis..> 2023-08-25 15:40 1.7M
EBP-Guide_Mon_Associ..> 2023-08-25 15:40 3.4M
EBP-Guide_Mon_Associ..> 2023-08-25 15:40 3.7M
EBP-Guide_Paye_Open_..> 2023-08-25 15:40 2.2M
EBP-Guide_Point_de_V..> 2023-08-25 15:40 3.1M
EBP-Le-guide-2015-de..> 2023-08-25 15:40 8.1M
EBP-ebp-guide-paie-c..> 2023-08-25 15:40 1.8M
EBP-guide-coiffure-e..> 2023-08-25 15:40 690K
EBP Business Plan Gu..> 2023-08-25 15:40 8.8M
EBP_Assistants_jurid..> 2023-08-25 15:40 3.3M
EBP_Automobile_V12_G..> 2023-08-25 15:40 3.2M
EBP_Bar_Restaurant_G..> 2023-08-25 15:40 3.1M
EBP_Batiment_2009_10..> 2023-08-25 15:40 3.3M
EBP_BusinessPlan_200..> 2023-08-25 15:40 3.8M
EBP_BusinessPlan_201..> 2023-08-25 15:40 3.8M
EBP_Compta_14_Guide...> 2023-08-25 15:40 4.5M
EBP_Compta_19_Guide...> 2023-08-25 15:40 3.0M
EBP_Compta_Liberale_..> 2023-08-25 15:40 5.0M
EBP_GestionCommercia..> 2023-08-25 15:40 4.7M
EBP_Guide_Assistants..> 2023-08-25 15:40 811K
EBP_Guide_Auto-entre..> 2023-08-25 15:40 761K
EBP_Guide_EBP_Factur..> 2023-08-25 15:40 891K
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.9M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.9M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.6M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.8M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.0M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.1M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.2M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.9M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.3M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.4M
EBP_Manuel_Utilisate..> 2023-08-25 15:40 1.5M
EBP_Previsions_2014_..> 2023-08-25 15:40 2.9M
EBPguidereportdesign..> 2014-06-24 12:20 58K
EN_UserGuide_JBM20_A..> 2023-08-25 15:40 90K
EN_UserGuide_JBM20_A..> 2023-08-25 15:40 90K
FR_Acer_Classroom_Ge..> 2023-08-25 15:40 44K
FR_UserGuide_JBM20_A..> 2023-08-25 15:40 90K
FUJITSU-Image-Scanne..> 2023-08-25 15:40 44K
FUJITSU-Image-Scanne..> 2023-08-25 15:40 147K
FUJITSU-Image-Scanne..> 2023-08-25 15:40 133K
Farnell-AT89C5131-Ha..> 2023-08-25 15:40 1.2M
Farnell-AT90USBKey-H..> 2023-08-25 15:40 916K
Farnell-Atmel-AVR192..> 2023-08-25 15:40 2.6M
Farnell-Atmel-ICE-US..> 2023-08-25 15:40 2.1M
Farnell-Atmel-OLED1-..> 2023-08-25 15:40 5.5M
Farnell-Atmel-QTouch..> 2023-08-25 15:40 2.9M
Farnell-Atmel-SAM4S-..> 2023-08-25 15:40 3.2M
Farnell-CC-Debugger-..> 2023-08-25 15:40 1.5M
Farnell-CC2530ZDK-Us..> 2023-08-25 15:40 2.2M
Farnell-CC2531-USB-H..> 2023-08-25 15:40 1.8M
Farnell-Connectors-N..> 2023-08-25 15:40 2.1M
Farnell-Explorer-16-..> 2023-08-25 15:40 1.3M
Farnell-Fastrack-Sup..> 2023-08-25 15:40 3.3M
Farnell-LMP91051-Use..> 2023-08-25 15:40 1.4M
Farnell-LUXEON-Guide..> 2023-08-25 15:40 2.3M
Farnell-MSP-EXP430F5..> 2023-08-25 15:40 1.2M
Farnell-MSP430-Hardw..> 2023-08-25 15:40 1.1M
Farnell-OMRON-INDUST..> 2023-08-25 15:40 6.9M
Farnell-Quick-Start-..> 2023-08-25 15:40 3.0M
Farnell-SmartRF06-Ev..> 2023-08-25 15:40 1.6M
Farnell-TALLYSMAN-PA..> 2023-08-25 15:40 3.1M
Farnell-TLV320AIC325..> 2023-08-25 15:40 2.9M
Farnell-TMP006EVM-Us..> 2023-08-25 15:40 1.3M
Farnell-The-essentia..> 2023-08-25 15:40 1.8M
Farnell-User-Guide-M..> 2023-08-25 15:40 2.0M
Farnell-WIRE-WRAP-50..> 2023-08-25 15:40 5.9M
Fiches-conseils-meti..> 2023-08-25 15:40 38K
Final-Cut-Pro-User-G..> 2023-08-25 15:40 2.6M
GAMING_APP_User_Guid..> 2023-08-25 15:40 104K
GPU-Load-Balance-Gui..> 2023-08-25 15:41 4.0M
GUIDE-DE-LUMIERE-GUI..> 2023-08-25 15:42 151K
GUIDE-DE-PREVENTION-..> 2023-08-25 15:42 78K
GUIDE-PEDA_FABLAB3.p..> 2023-08-25 15:42 90K
GUIDE-SUPPORT-A-CLIP..> 2023-08-25 15:42 47K
GUIDE-SUPPORT-A-CLIP..> 2023-08-25 15:42 47K
Galaxy-Y-S5360-Andro..> 2023-08-25 15:40 3.2M
Getting_Started_with..> 2023-08-25 15:40 109K
Google-Chrome-OS-Gui..> 2023-08-25 15:40 2.1M
Google-GOOGLE-MINI-T..> 2023-08-25 15:40 1.3M
Google-Guide-de-dema..> 2023-08-25 15:40 1.4M
Google-Petit-Guide-d..> 2023-08-25 15:41 1.4M
Google-Technical-Sup..> 2023-08-25 15:41 1.3M
Guide-EBP-Mon-Budget..> 2023-08-25 15:42 4.7M
Guide-d-administrati..> 2023-08-25 15:41 18M
Guide-d-administrati..> 2023-08-25 15:41 8.4M
Guide-d-administrati..> 2023-08-25 15:41 4.2M
Guide-d-installation..> 2023-08-25 15:41 2.6M
Guide-d-installation..> 2014-06-24 12:21 301K
Guide-d-installation..> 2014-06-24 12:21 301K
Guide-d-installation..> 2014-06-24 12:21 356K
Guide-d-installation..> 2014-06-24 12:21 438K
Guide-d-installation..> 2014-06-24 12:21 232K
Guide-d-installation..> 2023-08-25 15:41 615K
Guide-d-installation..> 2023-08-25 15:41 615K
Guide-de-configurati..> 2023-08-25 15:41 3.9M
Guide-de-configurati..> 2023-08-25 15:41 3.9M
Guide-de-configurati..> 2023-08-25 15:41 3.9M
Guide-de-configurati..> 2023-08-25 15:41 3.9M
Guide-de-deploiement..> 2023-08-25 15:41 3.4M
Guide-de-l'utilisate..> 2020-05-11 10:04 4.6M
Guide-de-l'utilisate..> 2023-08-25 15:41 243K
Guide-de-l-Utilisate..> 2023-08-25 15:41 1.4M
Guide-de-l-Utilisate..> 2023-08-25 15:41 4.4M
Guide-de-l-Utilisate..> 2023-08-25 15:42 2.3M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.5M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.5M
Guide-de-l-Utilisate..> 2023-08-25 15:42 2.3M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.4M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.4M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.4M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.5M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.1M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.1M
Guide-de-l-Utilisate..> 2023-08-25 15:42 1.7M
Guide-de-l-Utilisate..> 2023-08-25 15:42 1.9M
Guide-de-l-Utilisate..> 2023-08-25 15:42 1.9M
Guide-de-l-Utilisate..> 2023-08-25 15:42 2.1M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.3M
Guide-de-l-Utilisate..> 2023-08-25 15:42 4.3M
Guide-de-l-administr..> 2023-08-25 15:41 3.8M
Guide-de-l-administr..> 2023-08-25 15:41 25M
Guide-de-l-utilisate..> 2023-08-25 15:41 2.6M
Guide-de-l-utilisate..> 2023-08-25 15:41 2.6M
Guide-de-l-utilisate..> 2023-08-25 15:41 3.8M
Guide-de-l-utilisate..> 2023-08-25 15:41 3.9M
Guide-de-l-utilisate..> 2023-08-25 15:42 3.4M
Guide-de-l-utilisate..> 2023-08-25 15:42 2.9M
Guide-de-l-utilisate..> 2023-08-25 15:42 5.1M
Guide-de-l-utilisate..> 2023-08-25 15:42 2.5M
Guide-de-l-utilisate..> 2023-08-25 15:42 3.4M
Guide-de-l-utilisate..> 2023-08-25 15:41 6.6M
Guide-de-l-utilisate..> 2023-08-25 15:41 4.7M
Guide-de-l-utilisate..> 2023-08-25 15:41 4.4M
Guide-de-l-utilisate..> 2023-08-25 15:42 3.6M
Guide-de-l-utilisate..> 2020-05-18 08:22 4.9M
Guide-de-l-utilisate..> 2023-08-25 15:42 3.9M
Guide-de-l-utilisate..> 2023-08-25 15:42 4.5M
Guide-de-l-utilisate..> 2023-08-25 15:42 4.7M
Guide-de-l-utilisate..> 2023-08-25 15:42 3.1M
Guide-de-l-utilisate..> 2023-08-25 15:42 3.1M
Guide-de-l-utilisate..> 2023-08-25 15:42 3.2M
Guide-de-l-utilisate..> 2023-08-25 15:42 2.8M
Guide-de-l-utilisate..> 2023-08-25 15:42 2.8M
Guide-de-la-M%c3%a9t..> 2023-08-25 15:42 114K
Guide-des-Innovation..> 2023-08-25 15:42 90K
Guide-du-programme-S..> 2023-08-25 15:42 48K
Guide-pratique-metha..> 2023-08-25 15:42 1.1M
Guide-utilisation-Co..> 2023-08-25 15:42 90K
Guide.pdf-GUIDE.html 2023-08-25 15:42 44K
Guide_Agence-Manuels..> 2023-08-25 15:42 3.3M
Guide_Assistants_Jur..> 2023-08-25 15:42 141K
Guide_Auto-entrepren..> 2023-08-25 15:42 3.4M
Guide_Auto-entrepren..> 2023-08-25 15:42 90K
Guide_Bonnes_Pratiqu..> 2023-08-25 15:42 90K
Guide_BusinessPlan_C..> 2023-08-25 15:42 4.7M
Guide_BusinessPlan_C..> 2023-08-25 15:42 4.7M
Guide_CFAO.pdf-GUIDE..> 2023-08-25 15:42 90K
Guide_CRM_PRO_2013-M..> 2023-08-25 15:42 795K
Guide_Compta-Classic..> 2023-08-25 15:42 214K
Guide_Compta-GC_Open..> 2023-08-25 15:42 396K
Guide_Compta-Gestion..> 2023-08-25 15:42 557K
Guide_Compta-Open_Li..> 2023-08-25 15:42 637K
Guide_Compta_Pratic_..> 2023-08-25 15:42 694K
Guide_Compta_Pratic_..> 2023-08-25 15:42 4.7M
Guide_Devis_et_Factu..> 2023-08-25 15:42 868K
Guide_Devis_et_Factu..> 2023-08-25 15:42 969K
Guide_EBP_Devis_et_F..> 2023-08-25 15:42 686K
Guide_EBP_Facturatio..> 2023-08-25 15:42 1.0M
Guide_GC_Open_Line_P..> 2023-08-25 15:42 1.2M
Guide_GESTION_COMMER..> 2023-08-25 15:42 1.3M
Guide_Gestion_Ligne_..> 2023-08-25 15:42 4.7M
Guide_Gestion_de_Con..> 2023-08-25 15:42 1.4M
Guide_Liasse_Fiscale..> 2023-08-25 15:42 4.7M
Guide_Mon_Associatio..> 2023-08-25 15:42 1.5M
Guide_Paye_Classic_2..> 2023-08-25 15:42 1.6M
Guide_Paye_Open_Line..> 2023-08-25 15:42 1.6M
Guide_Report_Designe..> 2023-08-25 15:42 1.7M
Guide_d_utilisation_..> 2023-08-25 15:42 90K
Guide_pratique_URSSA..> 2012-01-29 17:03 31K
GuidedetelecopieManu..> 2012-03-01 10:14 8.4K
HARVARD-Citation-Gui..> 2023-08-25 15:42 90K
HP-LaserJet-P2030-Se..> 2023-08-25 15:42 1.2M
HP-Manuel-de-l-utili..> 2023-08-25 15:42 1.2M
HPPhotoSmart100guide..> 2012-05-07 18:47 366K
IBM-High-Availabilit..> 2023-08-25 15:42 436K
IMPOTS-Guide-utilisa..> 2023-08-25 15:42 5.8M
INTEL-Carte-d-interf..> 2023-08-25 15:42 2.7M
INTEL-Processeurs-ov..> 2023-08-25 15:42 679K
INTEL-download.intel..> 2023-08-25 15:42 425K
INTEL-download.intel..> 2023-08-25 15:42 374K
IOGEAR-Guide-d-insta..> 2023-08-25 15:42 2.3M
InstallationGuide-GU..> 2023-08-25 15:42 170K
JM11_User_Guide_Fre_..> 2023-08-25 15:42 44K
JV01_User_Guide_Fre_..> 2023-08-25 15:42 44K
KF_Guide.pdf-GUIDE.html 2023-08-25 15:42 114K
KF_Guide_1.pdf-GUIDE..> 2023-08-25 15:42 114K
KF_Guide_2.pdf-GUIDE..> 2023-08-25 15:42 114K
KTS-850G03_Installat..> 2023-08-25 15:42 79K
KTS-850J02_Installat..> 2023-08-25 15:42 96K
KTS-850J03_Installat..> 2023-08-25 15:42 98K
KTS-850J05_Installat..> 2023-08-25 15:42 54K
KTS-850J05_Installat..> 2023-08-25 15:42 54K
Konica-Minolta-PageS..> 2023-08-25 15:42 3.6M
Konica-Minolta-User-..> 2023-08-25 15:42 6.0M
Konica-Minolta-User-..> 2023-08-25 15:42 2.8M
Konica-Minolta-User-..> 2023-08-25 15:42 3.6M
Konica-Minolta-bizhu..> 2023-08-25 15:42 2.9M
Konica-Minolta-bizhu..> 2023-08-25 15:42 2.0M
Konica-Minolta-bizhu..> 2023-08-25 15:42 3.6M
Konica-Minolta-bizhu..> 2023-08-25 15:42 2.4M
Konica-Minolta-bizhu..> 2023-08-25 15:42 4.9M
Konica-Minolta-bizhu..> 2023-08-25 15:42 5.3M
Konica-Minolta-bizhu..> 2023-08-25 15:42 5.7M
Konica-Minolta-bizhu..> 2023-08-25 15:42 4.6M
Konica-Minolta-bizhu..> 2023-08-25 15:42 5.2M
Konica-Minolta-ineo-..> 2023-08-25 15:42 4.8M
Konica-Minolta-ineo-..> 2023-08-25 15:42 5.1M
Konica-Minolta-mc165..> 2023-08-25 15:42 4.8M
LI3DGettingStartedGu..> 2023-08-25 15:42 90K
Lattice-IQ-Video-Dem..> 2023-08-25 15:42 2.9M
Lattice-LatticeECP3-..> 2023-08-25 15:42 2.4M
Lattice-MachXO2-Brea..> 2023-08-25 15:42 2.8M
Lattice-PCI-Master-T..> 2023-08-25 15:42 2.9M
Lattice-Power-2-You-..> 2023-08-25 15:42 1.8M
Lattice-Using-User-F..> 2023-08-25 15:42 2.3M
Lenovo-0U-Basic-PDUs..> 2023-08-25 15:42 29K
Lenovo-0U-Switched-M..> 2023-08-25 15:42 55K
Lenovo-Guides-GUIDE...> 2023-08-25 15:42 3.8M
Lenovo-ThinkSystem-S..> 2023-08-25 15:42 4.0M
Lenovo-ThinkSystem-S..> 2023-08-25 15:42 3.5M
METTLER-TOLEDO-11795..> 2023-08-25 15:42 114K
METTLER-TOLEDO-Guide..> 2023-08-25 15:42 95K
METTLER-TOLEDO-KF_Gu..> 2023-08-25 15:42 114K
METTLER-TOLEDO-KF_Gu..> 2023-08-25 15:42 114K
METTLER-TOLEDO-KF_Gu..> 2023-08-25 15:42 114K
METTLER-TOLEDO-Manue..> 2023-08-25 15:42 114K
METTLER-TOLEDO-Manue..> 2023-08-25 15:42 114K
METTLER-TOLEDO-Manue..> 2023-08-25 15:42 114K
METTLER-TOLEDO-Manue..> 2023-08-25 15:42 114K
METTLER-TOLEDO-Manue..> 2023-08-25 15:42 114K
METTLER-TOLEDO-Manue..> 2023-08-25 15:42 79K
METTLER-TOLEDO-jagex..> 2023-08-25 15:42 114K
MIT-Skeptic's_Guide...> 2023-08-25 15:42 90K
Manuel-Microchip-ATW..> 2023-08-25 15:42 9.7M
Manuel-Microchip-Dat..> 2023-08-25 15:42 8.3M
Manuel-Microchip-Dev..> 2023-08-25 15:42 8.5M
Manuel-Microchip-MPL..> 2023-08-25 15:42 2.1M
Manuel-Microchip-MPL..> 2023-08-25 15:42 2.3M
Manuel-Microchip-atm..> 2023-08-25 15:42 14M
Manuel-Microchip-atm..> 2023-08-25 15:42 14M
Manuel-Microchip-dsP..> 2023-08-25 15:42 16M
Manuel-Microchip-dsP..> 2023-08-25 15:42 16M
Manuels-Utilisateur-..> 2023-08-25 15:42 3.4M
Microchip-ATWINC15x0..> 2023-08-25 15:42 9.7M
Microchip-Data-Visua..> 2023-08-25 15:42 8.3M
Microchip-Developmen..> 2023-08-25 15:42 8.5M
Microchip-HV9963-Boo..> 2023-08-25 15:42 4.9M
Microchip-MCP39F501-..> 2023-08-25 15:42 6.0M
Microchip-MCP3913-AD..> 2023-08-25 15:42 5.1M
Microchip-MPLAB-Harm..> 2023-08-25 15:42 2.1M
Microchip-MPLAB-Harm..> 2023-08-25 15:42 2.3M
Microchip-MPLAB-ICD-..> 2023-08-25 15:42 5.1M
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-Microchip-..> 2023-08-25 15:42 91K
Microchip-atmel-4216..> 2023-08-25 15:42 14M
Microchip-atmel-4219..> 2023-08-25 15:42 14M
Microchip-dsPICDEM-n..> 2023-08-25 15:42 16M
Microchip-dsPICDEM-n..> 2023-08-25 15:42 16M
Microsoft-Guide-de-l..> 2023-08-25 15:42 855K
Microsoft-Guide-de-l..> 2023-08-25 15:42 849K
N810_Guide_Fr.pdf-GU..> 2023-08-25 15:42 109K
Nokia_AD-54_UserGuid..> 2023-08-25 15:42 109K
Nokia_BH-101_HS-94W_..> 2023-08-25 15:42 109K
Nokia_BH-209_HS-97W_..> 2023-08-25 15:42 109K
Nokia_BH-210_HS-98W_..> 2023-08-25 15:42 109K
Nokia_BH-211_HS-99W_..> 2023-08-25 15:42 109K
Nokia_BH-700_UserGui..> 2023-08-25 15:42 109K
Nokia_BH-701_HS-74W_..> 2023-08-25 15:42 109K
Nokia_BH-801_UserGui..> 2023-08-25 15:42 109K
Nokia_Conective_cabl..> 2023-08-25 15:42 109K
Nokia_LD-1W_UserGuid..> 2023-08-25 15:42 109K
Nokia_MD-3_UserGuide..> 2023-08-25 15:42 109K
Nokia_MD-4_UserGuide..> 2023-08-25 15:42 109K
Nokia_WH-600_HS-103_..> 2023-08-25 15:42 109K
OS-Interoperability-..> 2023-08-25 15:42 3.2M
P256_BK_EBE22FA_00_w..> 2023-08-25 15:42 109K
P746_BK_I8055398_00_..> 2023-08-25 15:42 109K
P881_BK_C3A802A0_00_..> 2023-08-25 15:42 109K
P881_BK_C3A802A0_00_..> 2023-08-25 15:42 109K
P881_BK_C3A802A0_00_..> 2023-08-25 15:42 109K
P881_BK_U42291C6_00_..> 2023-08-25 15:42 109K
PINCE-GUIDE-CABLE-AC..> 2023-08-25 15:42 47K
PN111649_UserGuide_A..> 2023-08-25 15:42 90K
PN111871_UserGuide_A..> 2023-08-25 15:42 90K
PN112892b_UserGuide_..> 2023-08-25 15:42 90K
Power-Mac-G-Guide-de..> 2023-08-25 15:42 2.0M
Power-Mac-G5-Guide-d..> 2023-08-25 15:42 2.0M
PowerBook-G4-1-pouce..> 2023-08-25 15:42 3.2M
PowerBook-G4-15-pouc..> 2023-08-25 15:42 3.2M
PrimePerformanceMana..> 2023-08-25 15:42 109K
Processeurs-overDriv..> 2023-08-25 15:42 679K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
QuickStartGuide_Acer..> 2023-08-25 15:42 44K
RG54SE_Quick-User's-..> 2023-08-25 15:42 104K
Regulatory-20Informa..> 2023-08-25 15:42 45K
SAMSUNG-Lecteur-enre..> 2023-08-25 15:42 6.4M
SAMSUNG-Lecteur-enre..> 2023-08-25 15:42 6.1M
SAMSUNG-TV-LED-32-Fu..> 2023-08-25 15:42 6.8M
SAMSUNG-Wireless_Aud..> 2023-08-25 15:42 5.4M
SCCP_and_SIP_SRST_Ad..> 2023-08-25 15:42 109K
Samsung-Guide-détail..> 2023-08-25 15:42 4.7M
Samsung-Guide-de-l-u..> 2023-08-25 15:42 4.1M
Samsung-i-Launcher_g..> 2023-08-25 15:42 2.2M
Scouts-Et-Guides-De-..> 2023-08-25 15:42 419K
Sefram-GUIDE_SIMPLIF..> 2023-08-25 15:42 494K
Sefram-GUIDE_SIMPLIF..> 2023-08-25 15:42 455K
Sefram-GUIDE_SIMPLIF..> 2023-08-25 15:42 436K
Sitemap-GUIDES.txt 2023-07-03 08:50 148K
SteelSeries_Engine3_..> 2023-08-25 15:42 104K
TM_Generic_User_guid..> 2023-08-25 15:42 44K
US54SE_Quick-User's-..> 2023-08-25 15:42 104K
User-20Guide-20Acer-..> 2023-08-25 15:42 44K
User-Guide-for-the-C..> 2023-08-25 15:42 109K
User-Guide-for-the-C..> 2023-08-25 15:42 2.3M
User-Guide-for-the-C..> 2023-08-25 15:42 4.0M
User-Guide-iPad-For-..> 2023-08-25 15:42 2.9M
User-Guide-iPad-For-..> 2023-08-25 15:42 2.9M
UserGuide_ARCHOS_70_..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_90_..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_90b..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_97_..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_97_..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_97_..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_97b..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_101..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_101..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_101..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_101..> 2023-08-25 15:42 90K
UserGuide_ARCHOS_101..> 2023-08-25 15:42 90K
UserGuide_Archos_7_P..> 2023-08-25 15:42 90K
User_Guide_2_Archos_..> 2023-08-25 15:42 90K
User_Guide_EN_ES_Arc..> 2023-08-25 15:42 90K
User_Guide_FR_DE_Arc..> 2023-08-25 15:42 90K
User_Guide_NL_IT_Arc..> 2023-08-25 15:42 90K
User_Guide_RU_Archos..> 2023-08-25 15:42 90K
V173p-20Service-20Gu..> 2023-08-25 15:42 44K
acer-aspire-1510-ser..> 2023-08-25 15:38 44K
acer-aspire-5532-ser..> 2023-08-25 15:38 44K
acer_liquid_z3_guide..> 2023-08-25 15:38 44K
adapter-pro100-pro10..> 2023-08-25 15:38 374K
admin-guide-intellig..> 2023-08-25 15:38 109K
admin-guide-intellig..> 2023-08-25 15:38 109K
amp-buyers-guide-kor..> 2023-08-25 15:38 109K
apple-airmac_express..> 2023-08-25 15:38 2.8M
apple_Macintosh-User..> 2023-08-25 15:39 2.0M
apple_Macintosh-User..> 2023-08-25 15:39 2.0M
apple_earpods_user_g..> 2023-08-25 15:39 2.5M
archos-101-internet-..> 2023-08-25 15:39 154K
bizhub-423-363-283-2..> 2023-08-25 15:39 2.4M
bizhub-C35-French-Sh..> 2023-08-25 15:39 3.3M
bizhub-C360-C280-C22..> 2023-08-25 15:39 3.8M
business_plan_guide...> 2023-08-25 15:40 8.8M
c_COPSGUIDE_Processe..> 2023-08-25 15:40 13K
cb21ag10vistaconfigg..> 2023-08-25 15:40 109K
ccl_customer_portal_..> 2023-08-25 15:40 109K
ccl_redemption_guide..> 2023-08-25 15:40 109K
cisco-Cisco-836-Rout..> 2023-08-25 15:40 72K
cisco-Cisco-837-Rout..> 2023-08-25 15:40 72K
cisco-telepresence-g..> 2023-08-25 15:40 109K
cisco_uc_guide.pdf-G..> 2023-08-25 15:40 109K
config_guide_28jun0-..> 2023-08-25 15:40 54K
cray--ssd-installati..> 2023-08-25 15:40 67K
cray-data-management..> 2023-08-25 15:40 563K
cray-system-environm..> 2023-08-25 15:40 91K
cs88_b_conference-88..> 2023-08-25 15:40 109K
da-Vinci-1.0A_Quick-..> 2023-08-25 15:40 85K
da-Vinci-201.0A_Quic..> 2023-08-25 15:40 90K
data-management-plat..> 2023-08-25 15:40 480K
dx70-installation-gu..> 2023-08-25 15:40 109K
dx80-installation-gu..> 2023-08-25 15:40 109K
ebp-business-plan-20..> 2023-08-25 15:40 8.9M
en.fp-atr-tomtom1_qu..> 2023-08-25 15:40 103K
en.fp-aud-bvlink1_qu..> 2023-08-25 15:40 103K
en.fp-aud-smartmic1_..> 2023-08-25 15:40 103K
en.fp_aud_bvlink2_qu..> 2023-08-25 15:40 103K
entry_guide.pdf-GUID..> 2023-08-25 15:40 109K
fiche_technique_et_q..> 2023-08-25 15:40 90K
flashforge_creator_p..> 2023-08-25 15:40 90K
galileo-sb-galileo_b..> 2023-08-25 15:40 425K
guide+des+aides-GUID..> 2023-08-25 15:41 80K
guide-c07-740588.pdf..> 2023-08-25 15:41 109K
guide-des-matieres-f..> 2023-08-25 15:42 90K
guideUtilisateurSwee..> 2023-08-25 15:42 90K
guide_utilisation_to..> 2023-08-25 15:42 90K
guidedesassociations..> 2011-10-13 10:55 216K
guidedocumentationEB..> 2014-06-24 12:26 2.0M
guidenotebook11_13du..> 2023-08-25 15:42 90K
guideorsay20102011-G..> 2011-11-14 07:00 340K
guidepetiteenfance20..> 2011-10-13 07:35 71K
guidepratiqueversail..> 2012-03-09 18:22 325K
guideseniorsversaill..> 2011-10-13 07:29 102K
how-to-guide-custome..> 2023-08-25 15:42 109K
iPad-Guide-de-l-util..> 2023-08-25 15:42 5.1M
iPad-Guide-de-l-util..> 2023-08-25 15:42 5.1M
iPadguideutilisateur..> 2016-02-03 17:46 379K
iPod_nano_6thgen_Gui..> 2016-02-03 17:46 142K
iPod_nano_6thgen_Use..> 2016-02-03 17:46 120K
iphone_guide_de_l_ut..> 2016-02-03 17:46 378K
jagextr_userguideope..> 2023-08-25 15:42 114K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-Konica..> 2023-08-25 15:42 361K
konicaminolta-bizhub..> 2023-08-25 15:42 361K
konicaminolta-bizhub..> 2023-08-25 15:42 361K
konicaminolta-bizhub..> 2023-08-25 15:42 361K
le+guide+de+l'auto-e..> 2023-08-25 15:42 84K
le+guide+pratique+de..> 2023-08-25 15:42 80K
le-guide-pratique-de..> 2023-08-25 15:42 80K
le-guide-pratique-pm..> 2023-08-25 15:42 80K
le-guide-pratique-pm..> 2023-08-25 15:42 87K
le-guide-pratique-pm..> 2023-08-25 15:42 81K
lenovo-v470-v570-b47..> 2023-08-25 15:42 84K
les+guides+de+gestio..> 2023-08-25 15:42 81K
les-professions-libe..> 2023-08-25 15:42 81K
meyrarguesMEYR._guid..> 2012-01-29 16:42 62K
novascale-r440-f2-ge..> 2023-08-25 15:42 86K
sec_amp_guide_cte_et..> 2023-08-25 15:42 109K
slopingCeilingGuide...> 2023-08-25 15:42 90K
user-guide-5-1-user-..> 2023-08-25 15:42 109K
user-guide-crystal-u..> 2023-08-25 15:42 109K
user-guide-dynamo-2-..> 2023-08-25 15:42 109K
user-guide-nokia-1-u..> 2023-08-25 15:42 109K
user-guide-nokia-2-u..> 2023-08-25 15:42 109K
user-guide-nokia-3-1..> 2023-08-25 15:42 109K
user-guide-nokia-3-1..> 2023-08-25 15:42 109K
user-guide-nokia-3-u..> 2023-08-25 15:42 90K
user-guide-nokia-5-u..> 2023-08-25 15:42 90K
user-guide-nokia-6-1..> 2023-08-25 15:42 109K
user-guide-nokia-6-c..> 2023-08-25 15:42 109K
user-guide-nokia-6-c..> 2023-08-25 15:42 109K
user-guide-nokia-6-u..> 2023-08-25 15:42 109K
user-guide-nokia-7-p..> 2023-08-25 15:42 109K
user-guide-nokia-7-p..> 2023-08-25 15:42 109K
user-guide-nokia-7-u..> 2023-08-25 15:42 109K
user-guide-nokia-8-s..> 2023-08-25 15:42 109K
user-guide-nokia-8-s..> 2023-08-25 15:42 109K
user-guide-nokia-8-u..> 2023-08-25 15:42 109K
user-guide-nokia-105..> 2023-08-25 15:42 109K
user-guide-nokia-130..> 2023-08-25 15:42 109K
user-guide-nokia-331..> 2023-08-25 15:42 109K
user-guide-nokia-331..> 2023-08-25 15:42 106K
user-guide-nokia-331..> 2023-08-25 15:42 106K
user-guide-nokia-811..> 2023-08-25 15:42 109K
user-guide-nokia-x5-..> 2023-08-25 15:42 109K
user-guide-panda-use..> 2023-08-25 15:42 109K
www.guidel.com-GUIDE..> 2023-08-25 15:42 34K