From 3def9dc72e3233cc68c65f12ad17e3927d90c59f Mon Sep 17 00:00:00 2001 From: Dragos Bogdan Date: Thu, 9 May 2013 18:31:37 +0300 Subject: [PATCH] Added the PmodRF3 demo for Renesas RL78G14 board. --- Communication.c | 412 +++++++++++++++++++++++++++++++++++ Communication.h | 92 ++++++++ RDKRL78G14.c | 89 ++++++++ RDKRL78G14.h | 127 +++++++++++ ST7579.c | 568 ++++++++++++++++++++++++++++++++++++++++++++++++ ST7579.h | 100 +++++++++ 6 files changed, 1388 insertions(+) create mode 100644 Communication.c create mode 100644 Communication.h create mode 100644 RDKRL78G14.c create mode 100644 RDKRL78G14.h create mode 100644 ST7579.c create mode 100644 ST7579.h diff --git a/Communication.c b/Communication.c new file mode 100644 index 000000000..949edeb98 --- /dev/null +++ b/Communication.c @@ -0,0 +1,412 @@ +/***************************************************************************//** + * @file Communication.c + * @brief Implementation of the Communication Driver for RL78G14 processor. + * @author DBogdan (dragos.bogdan@analog.com) +******************************************************************************** + * Copyright 2012(c) Analog Devices, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Analog Devices, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * - The use of this software may or may not infringe the patent rights + * of one or more patent holders. This license does not release you + * from the requirement that you obtain separate licenses from these + * patent holders to use this software. + * - Use of the software either in source or binary form, must be run + * on or directly connected to an Analog Devices Inc. component. + * + * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +******************************************************************************** + * SVN Revision: $WCREV$ +*******************************************************************************/ + +/******************************************************************************/ +/***************************** Include Files **********************************/ +/******************************************************************************/ +#include "Communication.h" // Communication definitions +#include "RDKRL78G14.h" // RDKRL78G14 definitions + +char IICA0_Flag; + +/******************************************************************************/ +/************************ Functions Definitions *******************************/ +/******************************************************************************/ + +/***************************************************************************//** + * @brief I2C interrupt service routine. + * + * @return None. +*******************************************************************************/ +#pragma vector = INTIICA0_vect +__interrupt static void IICA0_Interrupt(void) +{ + IICA0_Flag = 1; +} + +/***************************************************************************//** + * @brief Initializes the SPI communication peripheral. + * + * @param lsbFirst - Transfer format (0 or 1). + * Example: 0x0 - MSB first. + * 0x1 - LSB first. + * @param clockFreq - SPI clock frequency (Hz). + * Example: 1000 - SPI clock frequency is 1 kHz. + * @param clockPol - SPI clock polarity (0 or 1). + * Example: 0x0 - Idle state for clock is a low level; active + * state is a high level; + * 0x1 - Idle state for clock is a high level; active + * state is a low level. + * @param clockEdg - SPI clock edge (0 or 1). + * Example: 0x0 - Serial output data changes on transition + * from idle clock state to active clock state; + * 0x1 - Serial output data changes on transition + * from active clock state to idle clock state. + * + * @return status - Result of the initialization procedure. + * Example: 1 - if initialization was successful; + * 0 - if initialization was unsuccessful. +*******************************************************************************/ +char SPI_Init(char lsbFirst, + long clockFreq, + char clockPol, + char clockEdg) +{ + long mckFreq = 32000000; + char sdrValue = 0; + + /* Configure the CS pins. */ + PMOD1_CS_OUT; + PMOD1_CS_HIGH; + PMOD2_CS_OUT; + PMOD2_CS_HIGH; + ST7579_CS_OUT; + ST7579_CS_HIGH; + + /* Enable input clock supply. */ + SAU1EN = 1; + + /* After setting the SAUmEN bit to 1, be sure to set serial clock select + register m (SPSm) after 4 or more fCLK clocks have elapsed. */ + NOP; + NOP; + NOP; + NOP; + + /* Select the fCLK as input clock. */ + SPS1 = 0x0000; + + /* Select the CSI operation mode. */ + SMR11 = 0x0020; + + clockPol = 1 - clockPol; + SCR11 = (clockEdg << 13) | + (clockPol << 12) | + 0xC000 | // Operation mode: Transmission/reception. + 0x0007; // 8-bit data length. + + /* clockFreq = mckFreq / (sdrValue * 2 + 2) */ + sdrValue = mckFreq / (2 * clockFreq) - 1; + SDR11 = sdrValue << 9; + + /* Set the clock and data initial level. */ + clockPol = 1 - clockPol; + SO1 &= ~0x0202; + SO1 |= (clockPol << 9) | + (clockPol << 1); + + /* Enable output for serial communication operation. */ + SOE1 |= 0x0002; + + /* Configure SCLK and MOSI pins as output. */ + PM7 &= ~0x05; + P7 |= 0x05; + + /* Configure the MISO pin as input. */ + PM7 |= 0x02; + + /* Set the SEmn bit to 1 and enter the communication wait status */ + SS1 |= 0x0002; + + return 1; +} + +/***************************************************************************//** + * @brief Writes data to SPI. + * + * @param slaveDeviceId - The ID of the selected slave device. + * @param data - Data represents the write buffer. + * @param bytesNumber - Number of bytes to write. + * + * @return Number of written bytes. +*******************************************************************************/ +char SPI_Write(char slaveDeviceId, + unsigned char* data, + char bytesNumber) +{ + char byte = 0; + unsigned char read = 0; + + if(slaveDeviceId == 1) + { + PMOD1_CS_LOW; + } + if(slaveDeviceId == 2) + { + PMOD2_CS_LOW; + } + if(slaveDeviceId == 3) + { + ST7579_CS_LOW; + } + for(byte = 0; byte < bytesNumber; byte++) + { + SIO21 = data[byte]; + NOP; + while(SSR11 & 0x0040); + read = SIO21; + } + if(slaveDeviceId == 1) + { + PMOD1_CS_HIGH; + } + if(slaveDeviceId == 2) + { + PMOD2_CS_HIGH; + } + if(slaveDeviceId == 3) + { + ST7579_CS_HIGH; + } + + return bytesNumber; +} + +/***************************************************************************//** + * @brief Reads data from SPI. + * + * @param slaveDeviceId - The ID of the selected slave device. + * @param data - Data represents the write buffer as an input parameter and the + * read buffer as an output parameter. + * @param bytesNumber - Number of bytes to read. + * + * @return Number of read bytes. +*******************************************************************************/ +char SPI_Read(char slaveDeviceId, + unsigned char* data, + char bytesNumber) +{ + char byte = 0; + + if(slaveDeviceId == 1) + { + PMOD1_CS_LOW; + } + if(slaveDeviceId == 2) + { + PMOD2_CS_LOW; + } + if(slaveDeviceId == 3) + { + ST7579_CS_LOW; + } + for(byte = 0; byte < bytesNumber; byte++) + { + SIO21 = data[byte]; + NOP; + while(SSR11 & 0x0040); + data[byte] = SIO21; + } + if(slaveDeviceId == 1) + { + PMOD1_CS_HIGH; + } + if(slaveDeviceId == 2) + { + PMOD2_CS_HIGH; + } + if(slaveDeviceId == 3) + { + ST7579_CS_HIGH; + } + + return bytesNumber; +} + +/***************************************************************************//** + * @brief Initializes the I2C communication peripheral. + * + * @param clockFreq - I2C clock frequency (Hz). + * Example: 100000 - SPI clock frequency is 100 kHz. + * @return status - Result of the initialization procedure. + * Example: 1 - if initialization was successful; + * 0 - if initialization was unsuccessful. +*******************************************************************************/ +char I2C_Init(long clockFreq) +{ + long fckFreq = 32000000; + unsigned char wlValue = 0; + unsigned char whValue = 0; + + /* Enable interrupts */ + EI; + + /* Enable input clock supply. */ + IICA0EN = 1; + + /* Set the fast mode plus operation. */ + SMC0 = 1; + + /* Set transfer rate. */ + wlValue = (unsigned char)((0.5 * fckFreq) / clockFreq); + whValue = (unsigned char)(wlValue - (fckFreq / (10 * clockFreq))); + IICWL0 = wlValue; + IICWH0 = whValue; + + STCEN0 = 1; // After operation is enabled, enable generation of a start + // condition without detecting a stop condition. + WTIM0 = 1; // Interrupt request is generated at the ninth clock’s + // falling edge. + + /* Enable I2C operation. */ + IICE0 = 1; + + /* Configure SCLA0 and SDAA0 pins as digital output. */ + P6 &= ~0x03; + PM6 &= ~0x03; + + return 1; +} + +/***************************************************************************//** + * @brief Writes data to a slave device. + * + * @param slaveAddress - Adress of the slave device. + * @param dataBuffer - Pointer to a buffer storing the transmission data. + * @param bytesNumber - Number of bytes to write. + * @param stopBit - Stop condition control. + * Example: 0 - A stop condition will not be sent; + * 1 - A stop condition will be sent. + * + * @return status - Number of read bytes or 0xFF if the slave address was not + * acknowledged by the device. +*******************************************************************************/ +char I2C_Write(char slaveAddress, + unsigned char* dataBuffer, + char bytesNumber, + char stopBit) +{ + char byte = 0; + char status = 0; + + IICAMK0 = 1; // Interrupt servicing disabled. + STT0 = 1; // Generate a start condition. + IICAMK0 = 0; // Interrupt servicing enabled. + + /* Send the first byte. */ + IICA0_Flag = 0; + IICA0 = (slaveAddress << 1); + while(IICA0_Flag == 0); + + if(ACKD0) // Acknowledge was detected. + { + for(byte = 0; byte < bytesNumber; byte++) + { + IICA0_Flag = 0; + IICA0 = *dataBuffer; + while(IICA0_Flag == 0); + dataBuffer++; + } + status = bytesNumber; + } + else // Acknowledge was not detected. + { + status = 0xFF; + } + if(stopBit) + { + SPT0 = 1; // Generate a stop condition. + while(IICBSY0); // Wait until the I2C bus status flag is cleared. + } + + return status; +} + +/***************************************************************************//** + * @brief Reads data from a slave device. + * + * @param slaveAddress - Adress of the slave device. + * @param dataBuffer - Pointer to a buffer that will store the received data. + * @param bytesNumber - Number of bytes to read. + * @param stopBit - Stop condition control. + * Example: 0 - A stop condition will not be sent; + * 1 - A stop condition will be sent. + * + * @return status - Number of read bytes or 0xFF if the slave address was not + * acknowledged by the device. +*******************************************************************************/ +char I2C_Read(char slaveAddress, + unsigned char* dataBuffer, + char bytesNumber, + char stopBit) +{ + char byte = 0; + char status = 0; + + IICAMK0 = 1; // Interrupt servicing disabled. + STT0 = 1; // Generate a start condition. + IICAMK0 = 0; // Interrupt servicing enabled. + + /* Send the first byte. */ + IICA0_Flag = 0; + IICA0 = (slaveAddress << 1) + 1; + while(IICA0_Flag == 0); + + if(ACKD0) // Acknowledge was detected. + { + ACKE0 = 1; // Enable acknowledgment. + for(byte = 0; byte < bytesNumber; byte++) + { + if(byte == (bytesNumber - 1)) + { + ACKE0 = 0U; // Disable acknowledgment. + } + WREL0 = 1U; // Cancel wait. + IICA0_Flag = 0; + while(IICA0_Flag == 0); + *dataBuffer = IICA0; + dataBuffer++; + } + status = bytesNumber; + } + else // Acknowledge was not detected. + { + status = 0xFF; + } + if(stopBit) + { + SPT0 = 1; // Generate a stop condition. + while(IICBSY0); // Wait until the I2C bus status flag is cleared. + } + + return status; +} diff --git a/Communication.h b/Communication.h new file mode 100644 index 000000000..268e5dfed --- /dev/null +++ b/Communication.h @@ -0,0 +1,92 @@ +/***************************************************************************//** + * @file Communication.h + * @brief Header file of the Communication Driver for RL78G14 processor. + * @author DBogdan (dragos.bogdan@analog.com) +******************************************************************************** + * Copyright 2012(c) Analog Devices, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Analog Devices, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * - The use of this software may or may not infringe the patent rights + * of one or more patent holders. This license does not release you + * from the requirement that you obtain separate licenses from these + * patent holders to use this software. + * - Use of the software either in source or binary form, must be run + * on or directly connected to an Analog Devices Inc. component. + * + * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +******************************************************************************** + * SVN Revision: $WCREV$ +*******************************************************************************/ +#ifndef __COMMUNICATION_H__ +#define __COMMUNICATION_H__ + +/******************************************************************************/ +/***************************** Include Files **********************************/ +/******************************************************************************/ +#include "RDKRL78G14.h" + +/******************************************************************************/ +/*************************** Macros Definitions *******************************/ +/******************************************************************************/ +#define CS_PIN_LOW PMOD1_CS_LOW +#define CS_PIN_HIGH PMOD1_CS_HIGH +#define MISO_PIN PMOD1_MISO + +/******************************************************************************/ +/************************ Functions Declarations ******************************/ +/******************************************************************************/ + +/*! Initializes the SPI communication peripheral. */ +char SPI_Init(char lsbFirst, + long clockFreq, + char clockPol, + char clockEdg); + +/*! Writes data to SPI. */ +char SPI_Write(char slaveDeviceId, + unsigned char* data, + char bytesNumber); + +/*! Reads data from SPI. */ +char SPI_Read(char slaveDeviceId, + unsigned char* data, + char bytesNumber); + +/*! Initializes the I2C communication peripheral. */ +char I2C_Init(long clockFreq); + +/*! Writes data to a slave device. */ +char I2C_Write(char slaveAddress, + unsigned char* dataBuffer, + char bytesNumber, + char stopBit); + +/*! Reads data from a slave device. */ +char I2C_Read(char slaveAddress, + unsigned char* dataBuffer, + char bytesNumber, + char stopBit); + +#endif // __COMMUNICATION_H__ diff --git a/RDKRL78G14.c b/RDKRL78G14.c new file mode 100644 index 000000000..8a874fcf0 --- /dev/null +++ b/RDKRL78G14.c @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file RDKRL78G14.c + * @brief Implementation of the RDKRL78G14 Driver. + * @author DBogdan (dragos.bogdan@analog.com) +******************************************************************************** + * Copyright 2012(c) Analog Devices, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Analog Devices, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * - The use of this software may or may not infringe the patent rights + * of one or more patent holders. This license does not release you + * from the requirement that you obtain separate licenses from these + * patent holders to use this software. + * - Use of the software either in source or binary form, must be run + * on or directly connected to an Analog Devices Inc. component. + * + * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +******************************************************************************** + * SVN Revision: 831 +*******************************************************************************/ + +/******************************************************************************/ +/***************************** Include Files **********************************/ +/******************************************************************************/ +#include "RDKRL78G14.h" // RDKRL78G14 definitions + +/******************************************************************************/ +/************************ Functions Definitions *******************************/ +/******************************************************************************/ + +/***************************************************************************//** + * @brief Resets the RDKRL78G14. + * + * @return None. +*******************************************************************************/ +void RDKRL78G14_Reset(void) +{ + short delay = 0; + + EXTRST_HIGH; + for(delay = 0; delay < 1000; delay++) + { + NOP; + } + EXTRST_LOW; +} + +/***************************************************************************//** + * @brief Initializes the RDKRL78G14. + * + * @return status - Result of the initialization procedure. + * Example: 0 - if initialization was successful; + * -1 - if initialization was unsuccessful. +*******************************************************************************/ +char RDKRL78G14_Init(void) +{ + long delay = 0; + char status = -1; + + for(delay = 0; delay < 4000000; delay++) + { + NOP; + } + RDKRL78G14_Reset(); + status = 0; + + return status; +} diff --git a/RDKRL78G14.h b/RDKRL78G14.h new file mode 100644 index 000000000..1ddb011fa --- /dev/null +++ b/RDKRL78G14.h @@ -0,0 +1,127 @@ +/***************************************************************************//** + * @file RDKRL78G14.h + * @brief Header file of the RDKRL78G14 Driver. + * @author DBogdan (dragos.bogdan@analog.com) +******************************************************************************** + * Copyright 2012(c) Analog Devices, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Analog Devices, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * - The use of this software may or may not infringe the patent rights + * of one or more patent holders. This license does not release you + * from the requirement that you obtain separate licenses from these + * patent holders to use this software. + * - Use of the software either in source or binary form, must be run + * on or directly connected to an Analog Devices Inc. component. + * + * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +******************************************************************************** + * SVN Revision: 831 +*******************************************************************************/ + +#ifndef __RDKRL78G14_H__ +#define __RDKRL78G14_H__ + +/******************************************************************************/ +/***************************** Include Files **********************************/ +/******************************************************************************/ + +#include // R5F104PJ definitions +#include // Declarations of extended SFR registers +#include // Declarations of intrinsic functions + +/******************************************************************************/ +/************************* Operations Definitions *****************************/ +/******************************************************************************/ + +#define NOP __no_operation(); // No operation +#define EI __enable_interrupt(); // Enable interrupts +#define DI __disable_interrupt(); // Disable interrupts + +/******************************************************************************/ +/**************************** GPIO Definitions ********************************/ +/******************************************************************************/ + +/* External Reset Pin - P130 */ +#define EXTRST_PIN (1 << 0) +#define EXTRST_LOW P13 &= ~EXTRST_PIN +#define EXTRST_HIGH P13 |= EXTRST_PIN + +/* ST7579 CS Pin - P145 */ +#define ST7579_CS_PIN (1 << 5) +#define ST7579_CS_OUT PM14 &= ~ST7579_CS_PIN +#define ST7579_CS_LOW P14 &= ~ST7579_CS_PIN +#define ST7579_CS_HIGH P14 |= ST7579_CS_PIN + +/* ST7579 RS Pin - P146 */ +#define ST7579_RS_PIN (1 << 6) +#define ST7579_RS_OUT PM14 &= ~ST7579_RS_PIN +#define ST7579_RS_LOW P14 &= ~ST7579_RS_PIN +#define ST7579_RS_HIGH P14 |= ST7579_RS_PIN + +/* PMOD1 CS Pin - P83 */ +#define PMOD1_CS_PIN (1 << 3) +#define PMOD1_CS_OUT PM8 &= ~PMOD1_CS_PIN +#define PMOD1_CS_LOW P8 &= ~PMOD1_CS_PIN +#define PMOD1_CS_HIGH P8 |= PMOD1_CS_PIN + +/* PMOD1 MISO Pin */ +#define PMOD1_MISO_PIN (1 << 1) +#define PMOD1_MISO ((P7 & PMOD1_MISO_PIN) >> 1) + +/* PMOD2 CS Pin - P82 */ +#define PMOD2_CS_PIN (1 << 2) +#define PMOD2_CS_OUT PM8 &= ~PMOD2_CS_PIN +#define PMOD2_CS_LOW P8 &= ~PMOD2_CS_PIN +#define PMOD2_CS_HIGH P8 |= PMOD2_CS_PIN + +/* GPIO1 Pin - P46 */ +#define GPIO1_PIN (1 << 6) +#define GPIO1_PIN_OUT PM4 &= ~GPIO1_PIN; +#define GPIO1_PIN_LOW P4 &= ~GPIO1_PIN; +#define GPIO1_PIN_HIGH P4 |= GPIO1_PIN; + +/* GPIO2 Pin - P110 */ +#define GPIO2_PIN (1 << 0) +#define GPIO2_PIN_OUT PM11 &= ~GPIO2_PIN; +#define GPIO2_PIN_LOW P11 &= ~GPIO2_PIN; +#define GPIO2_PIN_HIGH P11 |= GPIO2_PIN; + +/* GPIO3 Pin - P111 */ +#define GPIO3_PIN (1 << 1) +#define GPIO3_PIN_OUT PM11 &= ~GPIO3_PIN; +#define GPIO3_PIN_LOW P11 &= ~GPIO3_PIN; +#define GPIO3_PIN_HIGH P11 |= GPIO3_PIN; + +/******************************************************************************/ +/************************ Functions Declarations ******************************/ +/******************************************************************************/ + +/*! Resets the RDKRL78G14. */ +void RDKRL78G14_Reset(void); + +/*! Initializes the RDKRL78G14. */ +char RDKRL78G14_Init(void); + +#endif // __RDKRL78G14_H__ diff --git a/ST7579.c b/ST7579.c new file mode 100644 index 000000000..f80d5f0f7 --- /dev/null +++ b/ST7579.c @@ -0,0 +1,568 @@ +/***************************************************************************//** + * @file ST7579.c + * @brief Implementation of ST7579 Driver. + * @author DBogdan (dragos.bogdan@analog.com) +******************************************************************************** + * Copyright 2012(c) Analog Devices, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Analog Devices, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * - The use of this software may or may not infringe the patent rights + * of one or more patent holders. This license does not release you + * from the requirement that you obtain separate licenses from these + * patent holders to use this software. + * - Use of the software either in source or binary form, must be run + * on or directly connected to an Analog Devices Inc. component. + * + * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +******************************************************************************** + * SVN Revision: $WCREV$ +*******************************************************************************/ + +/******************************************************************************/ +/***************************** Include Files **********************************/ +/******************************************************************************/ +#include "ST7579.h" // ST7579 definitions +#include "RDKRL78G14.h" // YRDKRL78G14 definitions +#include "Communication.h" // Communication definitions + +/******************************************************************************/ +/************************* Variables Definitions ******************************/ +/******************************************************************************/ + +const unsigned char st7579Font[95][5] = +{ + {0x00, 0x00, 0x00, 0x00, 0x00}, // sp + {0x00, 0x00, 0x2f, 0x00, 0x00}, // ! + {0x00, 0x07, 0x00, 0x07, 0x00}, // " + {0x14, 0x7f, 0x14, 0x7f, 0x14}, // # + {0x24, 0x2a, 0x7f, 0x2a, 0x12}, // $ + {0xc4, 0xc8, 0x10, 0x26, 0x46}, // % + {0x36, 0x49, 0x55, 0x22, 0x50}, // & + {0x00, 0x05, 0x03, 0x00, 0x00}, // ' + {0x00, 0x1c, 0x22, 0x41, 0x00}, // ( + {0x00, 0x41, 0x22, 0x1c, 0x00}, // ) + {0x14, 0x08, 0x3E, 0x08, 0x14}, // * + {0x08, 0x08, 0x3E, 0x08, 0x08}, // + + {0x00, 0x00, 0x50, 0x30, 0x00}, // , + {0x10, 0x10, 0x10, 0x10, 0x10}, // - + {0x00, 0x60, 0x60, 0x00, 0x00}, // . + {0x20, 0x10, 0x08, 0x04, 0x02}, // / + {0x3E, 0x51, 0x49, 0x45, 0x3E}, // 0 + {0x00, 0x42, 0x7F, 0x40, 0x00}, // 1 + {0x42, 0x61, 0x51, 0x49, 0x46}, // 2 + {0x21, 0x41, 0x45, 0x4B, 0x31}, // 3 + {0x18, 0x14, 0x12, 0x7F, 0x10}, // 4 + {0x27, 0x45, 0x45, 0x45, 0x39}, // 5 + {0x3C, 0x4A, 0x49, 0x49, 0x30}, // 6 + {0x01, 0x71, 0x09, 0x05, 0x03}, // 7 + {0x36, 0x49, 0x49, 0x49, 0x36}, // 8 + {0x06, 0x49, 0x49, 0x29, 0x1E}, // 9 + {0x00, 0x36, 0x36, 0x00, 0x00}, // : + {0x00, 0x56, 0x36, 0x00, 0x00}, // ; + {0x08, 0x14, 0x22, 0x41, 0x00}, // < + {0x14, 0x14, 0x14, 0x14, 0x14}, // = + {0x00, 0x41, 0x22, 0x14, 0x08}, // > + {0x02, 0x01, 0x51, 0x09, 0x06}, // ? + {0x32, 0x49, 0x59, 0x51, 0x3E}, // @ + {0x7E, 0x11, 0x11, 0x11, 0x7E}, // A + {0x7F, 0x49, 0x49, 0x49, 0x36}, // B + {0x3E, 0x41, 0x41, 0x41, 0x22}, // C + {0x7F, 0x41, 0x41, 0x22, 0x1C}, // D + {0x7F, 0x49, 0x49, 0x49, 0x41}, // E + {0x7F, 0x09, 0x09, 0x09, 0x01}, // F + {0x3E, 0x41, 0x49, 0x49, 0x7A}, // G + {0x7F, 0x08, 0x08, 0x08, 0x7F}, // H + {0x00, 0x41, 0x7F, 0x41, 0x00}, // I + {0x20, 0x40, 0x41, 0x3F, 0x01}, // J + {0x7F, 0x08, 0x14, 0x22, 0x41}, // K + {0x7F, 0x40, 0x40, 0x40, 0x40}, // L + {0x7F, 0x02, 0x0C, 0x02, 0x7F}, // M + {0x7F, 0x04, 0x08, 0x10, 0x7F}, // N + {0x3E, 0x41, 0x41, 0x41, 0x3E}, // O + {0x7F, 0x09, 0x09, 0x09, 0x06}, // P + {0x3E, 0x41, 0x51, 0x21, 0x5E}, // Q + {0x7F, 0x09, 0x19, 0x29, 0x46}, // R + {0x46, 0x49, 0x49, 0x49, 0x31}, // S + {0x01, 0x01, 0x7F, 0x01, 0x01}, // T + {0x3F, 0x40, 0x40, 0x40, 0x3F}, // U + {0x1F, 0x20, 0x40, 0x20, 0x1F}, // V + {0x3F, 0x40, 0x38, 0x40, 0x3F}, // W + {0x63, 0x14, 0x08, 0x14, 0x63}, // X + {0x07, 0x08, 0x70, 0x08, 0x07}, // Y + {0x61, 0x51, 0x49, 0x45, 0x43}, // Z + {0x00, 0x7F, 0x41, 0x41, 0x00}, // [ + {0x55, 0x2A, 0x55, 0x2A, 0x55}, // / + {0x00, 0x41, 0x41, 0x7F, 0x00}, // ] + {0x04, 0x02, 0x01, 0x02, 0x04}, // ^ + {0x40, 0x40, 0x40, 0x40, 0x40}, // _ + {0x00, 0x01, 0x02, 0x04, 0x00}, // ' + {0x20, 0x54, 0x54, 0x54, 0x78}, // a + {0x7F, 0x48, 0x44, 0x44, 0x38}, // b + {0x38, 0x44, 0x44, 0x44, 0x20}, // c + {0x38, 0x44, 0x44, 0x48, 0x7F}, // d + {0x38, 0x54, 0x54, 0x54, 0x18}, // e + {0x08, 0x7E, 0x09, 0x01, 0x02}, // f + {0x0C, 0x52, 0x52, 0x52, 0x3E}, // g + {0x7F, 0x08, 0x04, 0x04, 0x78}, // h + {0x00, 0x44, 0x7D, 0x40, 0x00}, // i + {0x20, 0x40, 0x44, 0x3D, 0x00}, // j + {0x7F, 0x10, 0x28, 0x44, 0x00}, // k + {0x00, 0x41, 0x7F, 0x40, 0x00}, // l + {0x7C, 0x04, 0x18, 0x04, 0x78}, // m + {0x7C, 0x08, 0x04, 0x04, 0x78}, // n + {0x38, 0x44, 0x44, 0x44, 0x38}, // o + {0x7C, 0x14, 0x14, 0x14, 0x08}, // p + {0x08, 0x14, 0x14, 0x18, 0x7C}, // q + {0x7C, 0x08, 0x04, 0x04, 0x08}, // r + {0x48, 0x54, 0x54, 0x54, 0x20}, // s + {0x04, 0x3F, 0x44, 0x40, 0x20}, // t + {0x3C, 0x40, 0x40, 0x20, 0x7C}, // u + {0x1C, 0x20, 0x40, 0x20, 0x1C}, // v + {0x3C, 0x40, 0x30, 0x40, 0x3C}, // w + {0x44, 0x28, 0x10, 0x28, 0x44}, // x + {0x0C, 0x50, 0x50, 0x50, 0x3C}, // y + {0x44, 0x64, 0x54, 0x4C, 0x44}, // z + {0x08, 0x3e, 0x41, 0x41, 0x00}, // { + {0x00, 0x00, 0x77, 0x00, 0x00}, // | + {0x00, 0x41, 0x41, 0x3e, 0x08}, // } + {0x02, 0x01, 0x02, 0x01, 0x00} // ~ +}; + +/******************************************************************************/ +/************************ Functions Definitions *******************************/ +/******************************************************************************/ + +/***************************************************************************//** + * @brief Transmits 8 bits to ST7579 controller. + * + * @param data - Data to transmit. + * + * @return None. +*******************************************************************************/ +void ST7579_WriteByte(unsigned char data) +{ + SPI_Write(3, // The ID of the selected slave device. + &data, // Write buffer. + 1); // Number of bytes to write. +} + +/***************************************************************************//** + * @brief Sets X and Y adress of RAM. + * + * @param yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * + * @return None. +*******************************************************************************/ +void ST7579_GoTo(unsigned char yPosition, + unsigned char xPosition) +{ + ST7579_RS_LOW; + /* Set X address of RAM. */ + ST7579_WriteByte(0x28); + ST7579_WriteByte(0x80 + xPosition); + /* Set Y address of RAM. */ + ST7579_WriteByte(0x28); + ST7579_WriteByte(0x40 + yPosition); + ST7579_RS_HIGH; +} + +/***************************************************************************//** + * @brief Clears ST7579 RAM. + * + * @return None. +*******************************************************************************/ +void ST7579_Clear(void) +{ + unsigned short clearPosition = 0; + unsigned char yPosition = 0; + + for(clearPosition = 0; clearPosition < (8 * 96); clearPosition++) + { + if(!(clearPosition % 96)) + { + /* Set the X and Y address of RAM. */ + ST7579_GoTo(yPosition, 0); + yPosition++; + } + ST7579_WriteByte(0x00); + } +} + +/***************************************************************************//** + * @brief Initializes the ST7579 controller. + * + * @return status - Result of the initialization procedure. + * Example: 1 - if initialization was successful; + * 0 - if initialization was unsuccessful. +*******************************************************************************/ +unsigned char ST7579_Init(void) +{ + unsigned char status = 0; + unsigned short delay = 0; + + status = SPI_Init(0, // Transfer format. + 1000000, // SPI clock frequency. + 0, // SPI clock polarity. + 1); // SPI clock edge. + if(status != 1) + { + return status; + } + ST7579_RS_OUT; + ST7579_RS_LOW; + /* Select LCD bias ratio of the voltage required for driving the LCD. */ + ST7579_WriteByte(0x21); + ST7579_WriteByte(0x16); + /* Select Booster efficiency and Booster stage. */ + ST7579_WriteByte(0x23); + ST7579_WriteByte(0x99); + /* Set V0 Range. */ + ST7579_WriteByte(0x20); + ST7579_WriteByte(0x04); + /* 50 ms delay is recommended. */ + for(delay = 0; delay < 1000; delay++) + { + asm("NOP"); + } + /* Set the frame frequency */ + ST7579_WriteByte(0x23); + ST7579_WriteByte(0x0C); + /* Set V0. */ + ST7579_WriteByte(0x21); + ST7579_WriteByte(0xE7); + /* Select the display mode */ + ST7579_WriteByte(0x20); + ST7579_WriteByte(0x0C); + ST7579_RS_HIGH; + /* Clear RAM. */ + ST7579_Clear(); + + return status; +} + +/***************************************************************************//** + * @brief Sends a character to ST7579 controller. + * + * @param yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * @param character - The character. + * @param bigFont - Big font selection. + * + * @return None. +*******************************************************************************/ +void ST7579_Char(unsigned char yPosition, + unsigned char xPosition, + unsigned char character, + unsigned char bigFont) +{ + unsigned char column = 0; + unsigned char data = 0; + + if(bigFont) + { + /* Set the X and Y address of RAM. */ + ST7579_GoTo(yPosition, xPosition); + /* Send character data. */ + for(column = 0; column < 5; column++) + { + data = st7579Font[character - 32][column]; + data = ((data & 0x01) ? 0x03 : 0) | + ((data & 0x02) ? 0x0C : 0) | + ((data & 0x04) ? 0x30 : 0) | + ((data & 0x08) ? 0xC0 : 0); + ST7579_WriteByte(data); + ST7579_WriteByte(data); + ST7579_WriteByte(data); + } + ST7579_WriteByte(0); + ST7579_WriteByte(0); + ST7579_WriteByte(0); + yPosition++; + /* Set the X and Y address of RAM. */ + ST7579_GoTo(yPosition, xPosition); + /* Send character data. */ + for(column = 0; column < 5; column++) + { + data = st7579Font[character - 32][column]; + data = ((data & 0x10) ? 0x03 : 0) | + ((data & 0x20) ? 0x0C : 0) | + ((data & 0x40) ? 0x30 : 0) | + ((data & 0x80) ? 0xC0 : 0); + ST7579_WriteByte(data); + ST7579_WriteByte(data); + ST7579_WriteByte(data); + } + ST7579_WriteByte(0); + ST7579_WriteByte(0); + ST7579_WriteByte(0); + } + else + { + /* Set the X and Y address of RAM. */ + ST7579_GoTo(yPosition, xPosition); + /* Send character data. */ + for(column = 0; column < 5; column++) + { + ST7579_WriteByte(st7579Font[character - 32][column] << 1); + } + ST7579_WriteByte(0x00); + } +} + +/***************************************************************************//** + * @brief Sends a string to ST7579 controller. + * + * @param yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * @param string - The string. + * @param bigFont - Big font selection. + * + * @return None. +*******************************************************************************/ +void ST7579_String(unsigned char yPosition, + unsigned char xPosition, + unsigned char* string, + unsigned char bigFont) +{ + while(*string) + { + /* Send each character of the string. */ + ST7579_Char(yPosition, xPosition, *string++, bigFont); + xPosition += 6 + (bigFont * 12); + } +} + +/***************************************************************************//** + * @brief Sends an integer number to ST7579 controller. + * + * @param yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * @param number - The number. + * @param bigFont - Big font selection. + * + * @return None. +*******************************************************************************/ +void ST7579_Number(unsigned char yPosition, + unsigned char xPosition, + long number, + unsigned char bigFont) +{ + unsigned long mask = 1000000000; + unsigned char chNumber = 10; + unsigned char chIndex = 0; + + //bigFont = 0; + if(number < 0) + { + ST7579_Char(yPosition, xPosition, '-', bigFont); + xPosition += 6 + (bigFont * 12); + number *= -1; + } + else + { + if(number == 0) + { + ST7579_String(yPosition, xPosition, " 0", bigFont); + } + else + { + ST7579_Char(yPosition, xPosition, '+', bigFont); + xPosition += 6 + (bigFont * 12); + } + } + while(mask > number) + { + mask /= 10; + chNumber--; + } + for(chIndex = 0; chIndex < chNumber; chIndex++) + { + ST7579_Char(yPosition, xPosition, ((number / mask) % 10) + 0x30, bigFont); + mask /= 10; + xPosition += 6 + (bigFont * 12); + } +} + +/***************************************************************************//** + * @brief Sends a float number to ST7579 controller. + * + * @param yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * @param number - The number. + * @param resolution - Float resolution. + * @param bigFont - Big font selection. + * + * @return None. +*******************************************************************************/ +void ST7579_FloatNumber(unsigned char yPosition, + unsigned char xPosition, + float number, + unsigned char resolution, + unsigned char bigFont) +{ + unsigned long mask = 1000000000; + unsigned char chNumber = 10; + unsigned char index = 0; + long display = 1; + long multiplication = 1; + + + for(index = 0; index < resolution; index++) + { + multiplication *= 10; + } + display = (long)(number * multiplication); + if(display < 0) + { + ST7579_Char(yPosition, xPosition, '-', bigFont); + xPosition += 6 + (bigFont * 12); + number *= -1; + } + else + { + if(display == 0) + { + xPosition += 6 + (bigFont * 12); + ST7579_Char(yPosition, xPosition, '0', bigFont); + xPosition += 6 + (bigFont * 12); + if(resolution) + { + ST7579_Char(yPosition, xPosition, '.', bigFont); + xPosition += 6 + (bigFont * 12); + } + for(index = 0; index < resolution; index++) + { + ST7579_Char(yPosition, xPosition, '0', bigFont); + xPosition += 6 + (bigFont * 12); + } + } + else + { + ST7579_Char(yPosition, xPosition, '+', bigFont); + xPosition += 6 + (bigFont * 12); + } + } + while(mask > display) + { + mask /= 10; + chNumber--; + } + if((display > 0) && (display < multiplication)) + { + ST7579_String(yPosition, xPosition, "0.", bigFont); + xPosition += 12 + (bigFont * 24); + } + for(index = 0; index < chNumber; index++) + { + ST7579_Char(yPosition, xPosition, ((display / mask) % 10) + 0x30, bigFont); + mask /= 10; + xPosition += 6 + (bigFont * 12); + if((multiplication != 1) && (mask == (multiplication / 10))) + { + ST7579_Char(yPosition, xPosition, '.', bigFont); + xPosition += 6 + (bigFont * 12); + } + } +} + +/***************************************************************************//** + * @brief Sends an integer number in Hexa format to ST7579 controller. + * + * @param yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * @param number - The number. + * @param bigFont - Big font selection. + * + * @return None. +*******************************************************************************/ +void ST7579_HexNumber(unsigned char yPosition, + unsigned char xPosition, + long number, + unsigned char bigFont) +{ + unsigned long long mask = 268435456; + unsigned char chNumber = 8; + unsigned char chIndex = 0; + unsigned char display = 0; + + ST7579_String(yPosition, xPosition, "0x", bigFont); + xPosition += (6 + (bigFont * 12)) * 2; + if(number == 0) + { + ST7579_Char(yPosition, xPosition, '0', bigFont); + } + while(mask > number) + { + mask /= 16; + chNumber--; + } + for(chIndex = 0; chIndex < chNumber; chIndex++) + { + display = (number / mask) % 16; + mask /= 16; + if(display <= 9) + { + display += 0x30; + } + else + { + display += 0x37; + } + ST7579_Char(yPosition, xPosition, display, bigFont); + xPosition += 6 + (bigFont * 12); + } +} + +/***************************************************************************//** + * @brief Sends an image array to ST7579 controller. + * + * @param yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * @param image - The image array. + * @param width - The width of the image (pixels). + * @param height - The height of the image (pixels). + * + * @return None. +*******************************************************************************/ +void ST7579_Image(unsigned char yPosition, + unsigned char xPosition, + const unsigned char image[], + unsigned char width, + unsigned char height) +{ + unsigned short index = 0; + + for(index = 0; index < (width * height / 8); index++) + { + if(!(index % width)) + { + /* Set the X and Y address of RAM. */ + ST7579_GoTo(yPosition, xPosition); + yPosition ++; + } + ST7579_WriteByte(image[index]); + } +} diff --git a/ST7579.h b/ST7579.h new file mode 100644 index 000000000..75d13a70b --- /dev/null +++ b/ST7579.h @@ -0,0 +1,100 @@ +/***************************************************************************//** + * @file ST7579.h + * @brief Header file of ST7579 Driver. + * @author DBogdan (dragos.bogdan@analog.com) +******************************************************************************** + * Copyright 2012(c) Analog Devices, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Analog Devices, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * - The use of this software may or may not infringe the patent rights + * of one or more patent holders. This license does not release you + * from the requirement that you obtain separate licenses from these + * patent holders to use this software. + * - Use of the software either in source or binary form, must be run + * on or directly connected to an Analog Devices Inc. component. + * + * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +******************************************************************************** + * SVN Revision: $WCREV$ +*******************************************************************************/ +#ifndef __ST7579_H__ +#define __ST7579_H__ + +/******************************************************************************/ +/************************ Functions Declarations ******************************/ +/******************************************************************************/ + +/*! Transmits 8 bits to ST7579 controller. */ +void ST7579_WriteByte(unsigned char data); + +/*! Sets X and Y adress of RAM. */ +void ST7579_GoTo(unsigned char yPosition, + unsigned char xPosition); + +/*! Clears ST7579 RAM. */ +void ST7579_Clear(void); + +/*! Initializes the ST7579 controller. */ +unsigned char ST7579_Init(void); + +/*! Sends a character to ST7579 controller. */ +void ST7579_Char(unsigned char yPosition, + unsigned char xPosition, + unsigned char character, + unsigned char bigFont); + +/*! Sends a string to ST7579 controller. */ +void ST7579_String(unsigned char yPosition, + unsigned char xPosition, + unsigned char* string, + unsigned char bigFont); + +/*! Sends an integer number to ST7579 controller. */ +void ST7579_Number(unsigned char yPosition, + unsigned char xPosition, + long number, + unsigned char bigFont); + +/*! Sends a float number to ST7579 controller. */ +void ST7579_FloatNumber(unsigned char yPosition, + unsigned char xPosition, + float number, + unsigned char resolution, + unsigned char bigFont); + +/*! Sends an integer number in Hexa format to ST7579 controller. */ +void ST7579_HexNumber(unsigned char yPosition, + unsigned char xPosition, + long number, + unsigned char bigFont); + +/*! Sends an image array to ST7579 controller. */ +void ST7579_Image(unsigned char yPosition, + unsigned char xPosition, + const unsigned char image[], + unsigned char width, + unsigned char height); + +#endif // __ST7579_H__