From 3def9dc72e3233cc68c65f12ad17e3927d90c59f Mon Sep 17 00:00:00 2001 From: Dragos Bogdan Date: Thu, 9 May 2013 18:31:37 +0300 Subject: [PATCH 1/4] 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__ From 97fb8b4a447ff9bbc50768904cc05f9cc2c953bb Mon Sep 17 00:00:00 2001 From: Dragos Bogdan Date: Thu, 23 May 2013 16:12:03 +0300 Subject: [PATCH 2/4] Added the TIME driver for RL78G14. --- Communication.c | 185 ++++++++++++++++++++++++++++-------------------- Communication.h | 23 +++++- RDKRL78G14.c | 4 +- RDKRL78G14.h | 46 ++++++------ ST7579.c | 44 ++++++------ ST7579.h | 2 +- TIME.c | 167 +++++++++++++++++++++++++++++++++++++++++++ TIME.h | 65 +++++++++++++++++ 8 files changed, 411 insertions(+), 125 deletions(-) create mode 100644 TIME.c create mode 100644 TIME.h diff --git a/Communication.c b/Communication.c index 949edeb98..104e3e556 100644 --- a/Communication.c +++ b/Communication.c @@ -66,25 +66,25 @@ __interrupt static void IICA0_Interrupt(void) /***************************************************************************//** * @brief Initializes the SPI communication peripheral. * - * @param lsbFirst - Transfer format (0 or 1). - * Example: 0x0 - MSB first. - * 0x1 - LSB first. + * @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. + * @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. + * @return status - Result of the initialization procedure. + * Example: 0 - if initialization was successful; + * -1 - if initialization was unsuccessful. *******************************************************************************/ char SPI_Init(char lsbFirst, long clockFreq, @@ -93,6 +93,7 @@ char SPI_Init(char lsbFirst, { long mckFreq = 32000000; char sdrValue = 0; + char delay = 0; /* Configure the CS pins. */ PMOD1_CS_OUT; @@ -119,43 +120,49 @@ char SPI_Init(char lsbFirst, SMR11 = 0x0020; clockPol = 1 - clockPol; - SCR11 = (clockEdg << 13) | - (clockPol << 12) | - 0xC000 | // Operation mode: Transmission/reception. - 0x0007; // 8-bit data length. + 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; + SDR11 = sdrValue << 9; /* Set the clock and data initial level. */ clockPol = 1 - clockPol; - SO1 &= ~0x0202; - SO1 |= (clockPol << 9) | + 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; - + PM7 |= 0x02; + + /* Configure SCLK and MOSI pins as output. */ + P7 |= 0x05; + PM7 &= ~0x05; + + /* Wait for the changes to take place. */ + for(delay = 0; delay < 50; delay++) + { + NOP; + } + /* Set the SEmn bit to 1 and enter the communication wait status */ SS1 |= 0x0002; - - return 1; + + return 0; } /***************************************************************************//** * @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. + * @param data - Data represents the write buffer. + * @param bytesNumber - Number of bytes to write. * * @return Number of written bytes. *******************************************************************************/ @@ -163,8 +170,10 @@ char SPI_Write(char slaveDeviceId, unsigned char* data, char bytesNumber) { - char byte = 0; - unsigned char read = 0; + char byte = 0; + unsigned char read = 0; + unsigned short originalSCR = 0; + unsigned short originalSO1 = 0; if(slaveDeviceId == 1) { @@ -176,6 +185,12 @@ char SPI_Write(char slaveDeviceId, } if(slaveDeviceId == 3) { + ST1 |= 0x0002; + originalSO1 = SO1; + originalSCR = SCR11; + SO1 &= ~0x0202; + SCR11 &= ~0x3000; + SS1 |= 0x0002; ST7579_CS_LOW; } for(byte = 0; byte < bytesNumber; byte++) @@ -196,6 +211,10 @@ char SPI_Write(char slaveDeviceId, if(slaveDeviceId == 3) { ST7579_CS_HIGH; + ST1 |= 0x0002; + SO1 = originalSO1; + SCR11 = originalSCR; + SS1 |= 0x0002; } return bytesNumber; @@ -205,9 +224,9 @@ char SPI_Write(char slaveDeviceId, * @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. + * @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. *******************************************************************************/ @@ -215,7 +234,9 @@ char SPI_Read(char slaveDeviceId, unsigned char* data, char bytesNumber) { - char byte = 0; + char byte = 0; + unsigned short originalSCR = 0; + unsigned short originalSO1 = 0; if(slaveDeviceId == 1) { @@ -227,6 +248,12 @@ char SPI_Read(char slaveDeviceId, } if(slaveDeviceId == 3) { + ST1 |= 0x0002; + originalSO1 = SO1; + originalSCR = SCR11; + SO1 &= ~0x0202; + SCR11 &= ~0x3000; + SS1 |= 0x0002; ST7579_CS_LOW; } for(byte = 0; byte < bytesNumber; byte++) @@ -247,6 +274,10 @@ char SPI_Read(char slaveDeviceId, if(slaveDeviceId == 3) { ST7579_CS_HIGH; + ST1 |= 0x0002; + SO1 = originalSO1; + SCR11 = originalSCR; + SS1 |= 0x0002; } return bytesNumber; @@ -257,9 +288,9 @@ char SPI_Read(char slaveDeviceId, * * @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. + * @return status - Result of the initialization procedure. + * Example: 0 - if initialization was successful; + * -1 - if initialization was unsuccessful. *******************************************************************************/ char I2C_Init(long clockFreq) { @@ -279,13 +310,13 @@ char I2C_Init(long clockFreq) /* Set transfer rate. */ wlValue = (unsigned char)((0.5 * fckFreq) / clockFreq); whValue = (unsigned char)(wlValue - (fckFreq / (10 * clockFreq))); - IICWL0 = wlValue; - IICWH0 = whValue; + 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. + 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; @@ -294,21 +325,21 @@ char I2C_Init(long clockFreq) P6 &= ~0x03; PM6 &= ~0x03; - return 1; + return 0; } /***************************************************************************//** * @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. + * @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. + * @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, @@ -318,13 +349,13 @@ char I2C_Write(char slaveAddress, char byte = 0; char status = 0; - IICAMK0 = 1; // Interrupt servicing disabled. - STT0 = 1; // Generate a start condition. - IICAMK0 = 0; // Interrupt servicing enabled. + 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); + IICA0 = (slaveAddress << 1); while(IICA0_Flag == 0); if(ACKD0) // Acknowledge was detected. @@ -332,7 +363,7 @@ char I2C_Write(char slaveAddress, for(byte = 0; byte < bytesNumber; byte++) { IICA0_Flag = 0; - IICA0 = *dataBuffer; + IICA0 = *dataBuffer; while(IICA0_Flag == 0); dataBuffer++; } @@ -355,14 +386,14 @@ char I2C_Write(char slaveAddress, * @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. + * @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. + * @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, @@ -373,12 +404,12 @@ char I2C_Read(char slaveAddress, char status = 0; IICAMK0 = 1; // Interrupt servicing disabled. - STT0 = 1; // Generate a start condition. + STT0 = 1; // Generate a start condition. IICAMK0 = 0; // Interrupt servicing enabled. /* Send the first byte. */ IICA0_Flag = 0; - IICA0 = (slaveAddress << 1) + 1; + IICA0 = (slaveAddress << 1) + 1; while(IICA0_Flag == 0); if(ACKD0) // Acknowledge was detected. @@ -388,24 +419,24 @@ char I2C_Read(char slaveAddress, { if(byte == (bytesNumber - 1)) { - ACKE0 = 0U; // Disable acknowledgment. + ACKE0 = 0U; // Disable acknowledgment. } - WREL0 = 1U; // Cancel wait. - IICA0_Flag = 0; + WREL0 = 1U; // Cancel wait. + IICA0_Flag = 0; while(IICA0_Flag == 0); *dataBuffer = IICA0; dataBuffer++; } status = bytesNumber; } - else // Acknowledge was not detected. + else // Acknowledge was not detected. { - status = 0xFF; + status = 0xFF; } if(stopBit) { - SPT0 = 1; // Generate a stop condition. - while(IICBSY0); // Wait until the I2C bus status flag is cleared. + 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 index 268e5dfed..0d563bfad 100644 --- a/Communication.h +++ b/Communication.h @@ -50,9 +50,26 @@ /******************************************************************************/ /*************************** Macros Definitions *******************************/ /******************************************************************************/ -#define CS_PIN_LOW PMOD1_CS_LOW -#define CS_PIN_HIGH PMOD1_CS_HIGH -#define MISO_PIN PMOD1_MISO +#define SPI_CS_PIN_OUT PMOD1_CS_OUT +#define SPI_CS_LOW PMOD1_CS_LOW +#define SPI_CS_HIGH PMOD1_CS_HIGH +#define SPI_MISO PMOD1_MISO + +#define GPIO1_PIN_OUT PMOD1_GPIO1_PIN_OUT +#define GPIO1_LOW PMOD1_GPIO1_LOW +#define GPIO1_HIGH PMOD1_GPIO1_HIGH + +#define GPIO2_PIN_OUT PMOD1_GPIO2_PIN_OUT +#define GPIO2_LOW PMOD1_GPIO2_LOW +#define GPIO2_HIGH PMOD1_GPIO2_HIGH + +#define GPIO3_PIN_OUT PMOD1_GPIO3_PIN_OUT +#define GPIO3_LOW PMOD1_GPIO3_LOW +#define GPIO3_HIGH PMOD1_GPIO3_HIGH + +#define GPIO4_PIN_OUT PMOD1_GPIO4_PIN_OUT +#define GPIO4_LOW PMOD1_GPIO4_LOW +#define GPIO4_HIGH PMOD1_GPIO4_HIGH /******************************************************************************/ /************************ Functions Declarations ******************************/ diff --git a/RDKRL78G14.c b/RDKRL78G14.c index 8a874fcf0..5f77dfb69 100644 --- a/RDKRL78G14.c +++ b/RDKRL78G14.c @@ -37,7 +37,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ******************************************************************************** - * SVN Revision: 831 + * SVN Revision: $WCREV$ *******************************************************************************/ /******************************************************************************/ @@ -71,7 +71,7 @@ void RDKRL78G14_Reset(void) * * @return status - Result of the initialization procedure. * Example: 0 - if initialization was successful; - * -1 - if initialization was unsuccessful. + * -1 - if initialization was unsuccessful. *******************************************************************************/ char RDKRL78G14_Init(void) { diff --git a/RDKRL78G14.h b/RDKRL78G14.h index 1ddb011fa..c7eb230e2 100644 --- a/RDKRL78G14.h +++ b/RDKRL78G14.h @@ -37,7 +37,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ******************************************************************************** - * SVN Revision: 831 + * SVN Revision: $WCREV$ *******************************************************************************/ #ifndef __RDKRL78G14_H__ @@ -88,7 +88,31 @@ /* PMOD1 MISO Pin */ #define PMOD1_MISO_PIN (1 << 1) -#define PMOD1_MISO ((P7 & PMOD1_MISO_PIN) >> 1) +#define PMOD1_MISO ((P7 & PMOD1_MISO_PIN) >> 1) + +/* PMOD1 GPIO1 Pin - P47 */ +#define PMOD1_GPIO1_PIN (1 << 7) +#define PMOD1_GPIO1_PIN_OUT PM4 &= ~PMOD1_GPIO1_PIN; +#define PMOD1_GPIO1_LOW P4 &= ~PMOD1_GPIO1_PIN; +#define PMOD1_GPIO1_HIGH P4 |= PMOD1_GPIO1_PIN; + +/* PMOD1 GPIO2 Pin - P46 */ +#define PMOD1_GPIO2_PIN (1 << 6) +#define PMOD1_GPIO2_PIN_OUT PM4 &= ~PMOD1_GPIO2_PIN; +#define PMOD1_GPIO2_LOW P4 &= ~PMOD1_GPIO2_PIN; +#define PMOD1_GPIO2_HIGH P4 |= PMOD1_GPIO2_PIN; + +/* PMOD1 GPIO3 Pin - P110 */ +#define PMOD1_GPIO3_PIN (1 << 0) +#define PMOD1_GPIO3_PIN_OUT PM11 &= ~PMOD1_GPIO3_PIN; +#define PMOD1_GPIO3_LOW P11 &= ~PMOD1_GPIO3_PIN; +#define PMOD1_GPIO3_HIGH P11 |= PMOD1_GPIO3_PIN; + +/* PMOD1 GPIO4 Pin - P111 */ +#define PMOD1_GPIO4_PIN (1 << 1) +#define PMOD1_GPIO4_PIN_OUT PM11 &= ~PMOD1_GPIO4_PIN; +#define PMOD1_GPIO4_LOW P11 &= ~PMOD1_GPIO4_PIN; +#define PMOD1_GPIO4_HIGH P11 |= PMOD1_GPIO4_PIN; /* PMOD2 CS Pin - P82 */ #define PMOD2_CS_PIN (1 << 2) @@ -96,24 +120,6 @@ #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 ******************************/ /******************************************************************************/ diff --git a/ST7579.c b/ST7579.c index f80d5f0f7..eddc94660 100644 --- a/ST7579.c +++ b/ST7579.c @@ -215,19 +215,19 @@ void ST7579_Clear(void) * @brief Initializes the ST7579 controller. * * @return status - Result of the initialization procedure. - * Example: 1 - if initialization was successful; - * 0 - if initialization was unsuccessful. + * Example: 0 - if initialization was successful; + * -1 - if initialization was unsuccessful. *******************************************************************************/ -unsigned char ST7579_Init(void) +char ST7579_Init(void) { - unsigned char status = 0; + char status = -1; 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) + if(status != 0) { return status; } @@ -269,7 +269,7 @@ unsigned char ST7579_Init(void) * @param yPosition - Y address of RAM. * @param xPosition - X address of RAM. * @param character - The character. - * @param bigFont - Big font selection. + * @param bigFont - Big font selection. * * @return None. *******************************************************************************/ @@ -337,8 +337,8 @@ void ST7579_Char(unsigned char yPosition, * * @param yPosition - Y address of RAM. * @param xPosition - X address of RAM. - * @param string - The string. - * @param bigFont - Big font selection. + * @param string - The string. + * @param bigFont - Big font selection. * * @return None. *******************************************************************************/ @@ -360,8 +360,8 @@ void ST7579_String(unsigned char yPosition, * * @param yPosition - Y address of RAM. * @param xPosition - X address of RAM. - * @param number - The number. - * @param bigFont - Big font selection. + * @param number - The number. + * @param bigFont - Big font selection. * * @return None. *******************************************************************************/ @@ -374,7 +374,6 @@ void ST7579_Number(unsigned char yPosition, unsigned char chNumber = 10; unsigned char chIndex = 0; - //bigFont = 0; if(number < 0) { ST7579_Char(yPosition, xPosition, '-', bigFont); @@ -409,11 +408,11 @@ void ST7579_Number(unsigned char yPosition, /***************************************************************************//** * @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 yPosition - Y address of RAM. + * @param xPosition - X address of RAM. + * @param number - The number. * @param resolution - Float resolution. - * @param bigFont - Big font selection. + * @param bigFont - Big font selection. * * @return None. *******************************************************************************/ @@ -439,7 +438,7 @@ void ST7579_FloatNumber(unsigned char yPosition, { ST7579_Char(yPosition, xPosition, '-', bigFont); xPosition += 6 + (bigFont * 12); - number *= -1; + display *= -1; } else { @@ -458,6 +457,7 @@ void ST7579_FloatNumber(unsigned char yPosition, ST7579_Char(yPosition, xPosition, '0', bigFont); xPosition += 6 + (bigFont * 12); } + return; } else { @@ -465,7 +465,7 @@ void ST7579_FloatNumber(unsigned char yPosition, xPosition += 6 + (bigFont * 12); } } - while(mask > display) + while((mask > display) && (chNumber > resolution)) { mask /= 10; chNumber--; @@ -493,8 +493,8 @@ void ST7579_FloatNumber(unsigned char yPosition, * * @param yPosition - Y address of RAM. * @param xPosition - X address of RAM. - * @param number - The number. - * @param bigFont - Big font selection. + * @param number - The number. + * @param bigFont - Big font selection. * * @return None. *******************************************************************************/ @@ -541,9 +541,9 @@ void ST7579_HexNumber(unsigned char yPosition, * * @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). + * @param image - The image array. + * @param width - The width of the image (pixels). + * @param height - The height of the image (pixels). * * @return None. *******************************************************************************/ diff --git a/ST7579.h b/ST7579.h index 75d13a70b..566b40d48 100644 --- a/ST7579.h +++ b/ST7579.h @@ -57,7 +57,7 @@ void ST7579_GoTo(unsigned char yPosition, void ST7579_Clear(void); /*! Initializes the ST7579 controller. */ -unsigned char ST7579_Init(void); +char ST7579_Init(void); /*! Sends a character to ST7579 controller. */ void ST7579_Char(unsigned char yPosition, diff --git a/TIME.c b/TIME.c new file mode 100644 index 000000000..c2c4a515f --- /dev/null +++ b/TIME.c @@ -0,0 +1,167 @@ +/***************************************************************************//** + * @file TIME.c + * @brief Implementation of TIME Driver for RENESAS RL78G14 Processor. + * @author Dan Nechita +******************************************************************************** + * 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 "RDKRL78G14.h" // RDKRL78G14 definitions. +#include "TIME.h" // TIME definitions. + +/*****************************************************************************/ +/************************** Macros Definitions *******************************/ +/*****************************************************************************/ +#define TIMER_CNT_INTERVAL 65536 + +/*****************************************************************************/ +/************************ Variables Declarations *****************************/ +/*****************************************************************************/ +unsigned short overflowCounter = 0; + +/******************************************************************************/ +/************************ Functions Definitions *******************************/ +/******************************************************************************/ + +/***************************************************************************//** + * @brief INTTM00 interrupt service routine. + * + * @return None. +*******************************************************************************/ +#pragma vector = INTTM00_vect +__interrupt static void Timer0InterruptHandler(void) +{ + overflowCounter++; +} + +/***************************************************************************//** + * @brief Initializes the timer used in this driver. + * + * @return status - Result of the initialization procedure. + * Example: 0 - if initialization was successful; + * -1 - if initialization was unsuccessful. +*******************************************************************************/ +char TIME_Init(void) +{ + PER0 |= 0x0001; // Enable Supply for Unit 0 that contains timers 0..7. + TT0 |= 0x0001; // Stop channel 0(Timer 0). + TPS0 = 0x0005; // CK00 = FCLK / 32. + TMR00 |= 0x0000; // CK00 input clock for channel 0. + TMMK00 = 1; // Disable INTTM00 interrupt. + TMIF00 = 0; // Clear INTM00 interrupt flag. + /* Set INTTM00 low priority */ + TMPR100 = 1; + TMPR000 = 1; + /* Configure channel 0 as a interval timer. */ + TMR00 |= 0x0000; // Interval timer mode. + TO0 &= ~0x0001; // Timer 0 output value is "0". + TOE0 &= ~0x0001; // Disable output of timer 0. + TMMK00 = 0; // Enable INTTM00 interrupt. + + return 0; +} + +/***************************************************************************//** + * @brief The timer begins to count in steps of microseconds(us) until the user + * calls a stop measurement function. + * + * @return None. +*******************************************************************************/ +void TIME_StartMeasure(void) +{ + TDR00 = 0xFFFF; + overflowCounter = 0; + TS0 |= 0x0001; // Start timer 0. + TMIF00 = 0; // Clear INTM00 interrupt flag. +} + +/***************************************************************************//** + * @brief Stops the measurement process when the functions is called. + * + * @return Time(in microseconds) elapsed since the measurement began. +*******************************************************************************/ +unsigned long TIME_StopMeasure(void) +{ + unsigned long elapsedUs = 0; + unsigned short timerCnt = 0; + + timerCnt = TCR00; + TT0 |= 0x0001; // Stop Timer 0. + TMIF00 = 0; // Clear INTM00 interrupt flag. + overflowCounter = 0; + elapsedUs = ((unsigned long)overflowCounter * TIMER_CNT_INTERVAL) + + (0xFFFF - timerCnt); + + return elapsedUs; +} + +/***************************************************************************//** + * @brief Creates a delay of microseconds. + * + * @return None. +*******************************************************************************/ +void TIME_DelayUs(unsigned short usUnits) +{ + TDR00 = usUnits; + TS0 |= 0x0001; // Start timer 0. + while(!overflowCounter) + { + ; + } + overflowCounter = 0; + TT0 |= 0x0001; // Stop Timer 0. +} + +/***************************************************************************//** + * @brief Creates a delay of milliseconds. + * + * @return None. +*******************************************************************************/ +void TIME_DelayMs(unsigned short msUnits) +{ + TDR00 = 0x3E7; // 0x3E7 = 999(decimal). Timer will count down to 0. + TS0 |= 0x0001; // Start timer 0. + while(overflowCounter < msUnits) + { + ; + } + overflowCounter = 0; + TT0 |= 0x0001; // Stop Timer 0. +} diff --git a/TIME.h b/TIME.h new file mode 100644 index 000000000..cc60f09a5 --- /dev/null +++ b/TIME.h @@ -0,0 +1,65 @@ +/***************************************************************************//** + * @file TIME.h + * @brief Header file of TIME Driver for RENESAS RL78G14 Processor. + * @author Dan Nechita +******************************************************************************** + * 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 __TIME_H__ +#define __TIME_H__ + +/******************************************************************************/ +/************************ Functions Declarations ******************************/ +/******************************************************************************/ + +/*! Initializes the timer used in this driver. */ +char TIME_Init(void); + +/*! The timer begins to count in steps of microseconds(us) until the user calls + a stop measurement function. */ +void TIME_StartMeasure(void); + +/*! Stops the measurement process when the functions is called. */ +unsigned long TIME_StopMeasure(void); + +/*! Creates a delay of microseconds. */ +void TIME_DelayUs(unsigned short usUnits); + +/*! Creates a delay of milliseconds. */ +void TIME_DelayMs(unsigned short msUnits); + +#endif /* __TIME_H__ */ From fb64cb5e4cfb7277c29c8575842d629a96a0b2fd Mon Sep 17 00:00:00 2001 From: Dragos Bogdan Date: Sat, 4 Jan 2014 17:27:51 -0500 Subject: [PATCH 3/4] Uncrustify. --- Communication.c | 533 ++++++++++++++++------------------ Communication.h | 16 +- RDKRL78G14.c | 49 ++-- RDKRL78G14.h | 76 ++--- ST7579.c | 754 +++++++++++++++++++++++------------------------- ST7579.h | 10 +- TIME.c | 137 +++++---- TIME.h | 8 +- 8 files changed, 757 insertions(+), 826 deletions(-) diff --git a/Communication.c b/Communication.c index 104e3e556..48140964a 100644 --- a/Communication.c +++ b/Communication.c @@ -2,7 +2,7 @@ * @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. @@ -36,15 +36,15 @@ * 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 +#include "Communication.h" /* Communication definitions */ +#include "RDKRL78G14.h" /* RDKRL78G14 definitions */ char IICA0_Flag; @@ -56,13 +56,13 @@ char IICA0_Flag; * @brief I2C interrupt service routine. * * @return None. -*******************************************************************************/ + *******************************************************************************/ #pragma vector = INTIICA0_vect -__interrupt static void IICA0_Interrupt(void) +__interrupt static void +IICA0_Interrupt(void) { - IICA0_Flag = 1; + IICA0_Flag = 1; } - /***************************************************************************//** * @brief Initializes the SPI communication peripheral. * @@ -85,78 +85,77 @@ __interrupt static void IICA0_Interrupt(void) * @return status - Result of the initialization procedure. * Example: 0 - if initialization was successful; * -1 - if initialization was unsuccessful. -*******************************************************************************/ -char SPI_Init(char lsbFirst, - long clockFreq, - char clockPol, - char clockEdg) + *******************************************************************************/ +char +SPI_Init(char lsbFirst, + long clockFreq, + char clockPol, + char clockEdg) { - long mckFreq = 32000000; - char sdrValue = 0; - char delay = 0; + long mckFreq = 32000000; + char sdrValue = 0; + char delay = 0; - /* Configure the CS pins. */ - PMOD1_CS_OUT; - PMOD1_CS_HIGH; - PMOD2_CS_OUT; - PMOD2_CS_HIGH; - ST7579_CS_OUT; - ST7579_CS_HIGH; + /* 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; + /* 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; + /* 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 the MISO pin as input. */ + PM7 |= 0x02; + + /* Configure SCLK and MOSI pins as output. */ + P7 |= 0x05; + PM7 &= ~0x05; + + /* Wait for the changes to take place. */ + for(delay = 0; delay < 50; delay++) { NOP; + } - /* Select the fCLK as input clock. */ - SPS1 = 0x0000; + /* Set the SEmn bit to 1 and enter the communication wait status */ + SS1 |= 0x0002; - /* 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 the MISO pin as input. */ - PM7 |= 0x02; - - /* Configure SCLK and MOSI pins as output. */ - P7 |= 0x05; - PM7 &= ~0x05; - - /* Wait for the changes to take place. */ - for(delay = 0; delay < 50; delay++) - { - NOP; - } - - /* Set the SEmn bit to 1 and enter the communication wait status */ - SS1 |= 0x0002; - - return 0; + return 0; } - /***************************************************************************//** * @brief Writes data to SPI. * @@ -165,124 +164,110 @@ char SPI_Init(char lsbFirst, * @param bytesNumber - Number of bytes to write. * * @return Number of written bytes. -*******************************************************************************/ -char SPI_Write(char slaveDeviceId, - unsigned char* data, - char bytesNumber) + *******************************************************************************/ +char +SPI_Write(char slaveDeviceId, + unsigned char *data, + char bytesNumber) { - char byte = 0; - unsigned char read = 0; - unsigned short originalSCR = 0; - unsigned short originalSO1 = 0; + char byte = 0; + unsigned char read = 0; + unsigned short originalSCR = 0; + unsigned short originalSO1 = 0; - if(slaveDeviceId == 1) - { - PMOD1_CS_LOW; - } - if(slaveDeviceId == 2) - { - PMOD2_CS_LOW; - } - if(slaveDeviceId == 3) - { - ST1 |= 0x0002; - originalSO1 = SO1; - originalSCR = SCR11; - SO1 &= ~0x0202; - SCR11 &= ~0x3000; - SS1 |= 0x0002; - 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; - ST1 |= 0x0002; - SO1 = originalSO1; - SCR11 = originalSCR; - SS1 |= 0x0002; - } + if(slaveDeviceId == 1) { + PMOD1_CS_LOW; + } + if(slaveDeviceId == 2) { + PMOD2_CS_LOW; + } + if(slaveDeviceId == 3) { + ST1 |= 0x0002; + originalSO1 = SO1; + originalSCR = SCR11; + SO1 &= ~0x0202; + SCR11 &= ~0x3000; + SS1 |= 0x0002; + 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; + ST1 |= 0x0002; + SO1 = originalSO1; + SCR11 = originalSCR; + SS1 |= 0x0002; + } - return bytesNumber; + 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 + * @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 +SPI_Read(char slaveDeviceId, + unsigned char *data, + char bytesNumber) { - char byte = 0; - unsigned short originalSCR = 0; - unsigned short originalSO1 = 0; + char byte = 0; + unsigned short originalSCR = 0; + unsigned short originalSO1 = 0; - if(slaveDeviceId == 1) - { - PMOD1_CS_LOW; - } - if(slaveDeviceId == 2) - { - PMOD2_CS_LOW; - } - if(slaveDeviceId == 3) - { - ST1 |= 0x0002; - originalSO1 = SO1; - originalSCR = SCR11; - SO1 &= ~0x0202; - SCR11 &= ~0x3000; - SS1 |= 0x0002; - 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; - ST1 |= 0x0002; - SO1 = originalSO1; - SCR11 = originalSCR; - SS1 |= 0x0002; - } + if(slaveDeviceId == 1) { + PMOD1_CS_LOW; + } + if(slaveDeviceId == 2) { + PMOD2_CS_LOW; + } + if(slaveDeviceId == 3) { + ST1 |= 0x0002; + originalSO1 = SO1; + originalSCR = SCR11; + SO1 &= ~0x0202; + SCR11 &= ~0x3000; + SS1 |= 0x0002; + 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; + ST1 |= 0x0002; + SO1 = originalSO1; + SCR11 = originalSCR; + SS1 |= 0x0002; + } - return bytesNumber; + return bytesNumber; } - /***************************************************************************//** * @brief Initializes the I2C communication peripheral. * @@ -291,43 +276,43 @@ char SPI_Read(char slaveDeviceId, * @return status - Result of the initialization procedure. * Example: 0 - if initialization was successful; * -1 - if initialization was unsuccessful. -*******************************************************************************/ -char I2C_Init(long clockFreq) + *******************************************************************************/ +char +I2C_Init(long clockFreq) { - long fckFreq = 32000000; - unsigned char wlValue = 0; - unsigned char whValue = 0; + long fckFreq = 32000000; + unsigned char wlValue = 0; + unsigned char whValue = 0; - /* Enable interrupts */ - EI; + /* Enable interrupts */ + EI; - /* Enable input clock supply. */ - IICA0EN = 1; + /* Enable input clock supply. */ + IICA0EN = 1; - /* Set the fast mode plus operation. */ - SMC0 = 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; + /* 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. + 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; + /* Enable I2C operation. */ + IICE0 = 1; - /* Configure SCLA0 and SDAA0 pins as digital output. */ - P6 &= ~0x03; - PM6 &= ~0x03; + /* Configure SCLA0 and SDAA0 pins as digital output. */ + P6 &= ~0x03; + PM6 &= ~0x03; - return 0; + return 0; } - /***************************************************************************//** * @brief Writes data to a slave device. * @@ -338,50 +323,45 @@ char I2C_Init(long clockFreq) * 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 + * @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 +I2C_Write(char slaveAddress, + unsigned char *dataBuffer, + char bytesNumber, + char stopBit) { - char byte = 0; - char status = 0; + char byte = 0; + char status = 0; - IICAMK0 = 1; // Interrupt servicing disabled. - STT0 = 1; // Generate a start condition. - IICAMK0 = 0; // Interrupt servicing enabled. + 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); + /* 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. + 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; + return status; } - /***************************************************************************//** * @brief Reads data from a slave device. * @@ -392,52 +372,47 @@ char I2C_Write(char slaveAddress, * 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 + * @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 +I2C_Read(char slaveAddress, + unsigned char *dataBuffer, + char bytesNumber, + char stopBit) { - char byte = 0; - char status = 0; + char byte = 0; + char status = 0; - IICAMK0 = 1; // Interrupt servicing disabled. - STT0 = 1; // Generate a start condition. - IICAMK0 = 0; // Interrupt servicing enabled. + 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); + /* 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. + 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; + return status; } diff --git a/Communication.h b/Communication.h index 0d563bfad..c14bcbdeb 100644 --- a/Communication.h +++ b/Communication.h @@ -2,7 +2,7 @@ * @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. @@ -36,9 +36,9 @@ * 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__ @@ -83,12 +83,12 @@ char SPI_Init(char lsbFirst, /*! Writes data to SPI. */ char SPI_Write(char slaveDeviceId, - unsigned char* data, + unsigned char *data, char bytesNumber); /*! Reads data from SPI. */ char SPI_Read(char slaveDeviceId, - unsigned char* data, + unsigned char *data, char bytesNumber); /*! Initializes the I2C communication peripheral. */ @@ -96,14 +96,14 @@ char I2C_Init(long clockFreq); /*! Writes data to a slave device. */ char I2C_Write(char slaveAddress, - unsigned char* dataBuffer, + unsigned char *dataBuffer, char bytesNumber, char stopBit); /*! Reads data from a slave device. */ char I2C_Read(char slaveAddress, - unsigned char* dataBuffer, + unsigned char *dataBuffer, char bytesNumber, char stopBit); -#endif // __COMMUNICATION_H__ +#endif /* __COMMUNICATION_H__ */ diff --git a/RDKRL78G14.c b/RDKRL78G14.c index 5f77dfb69..3be586c51 100644 --- a/RDKRL78G14.c +++ b/RDKRL78G14.c @@ -2,7 +2,7 @@ * @file RDKRL78G14.c * @brief Implementation of the RDKRL78G14 Driver. * @author DBogdan (dragos.bogdan@analog.com) -******************************************************************************** + ******************************************************************************** * Copyright 2012(c) Analog Devices, Inc. * * All rights reserved. @@ -36,14 +36,14 @@ * 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 "RDKRL78G14.h" // RDKRL78G14 definitions +#include "RDKRL78G14.h" /* RDKRL78G14 definitions */ /******************************************************************************/ /************************ Functions Definitions *******************************/ @@ -53,37 +53,36 @@ * @brief Resets the RDKRL78G14. * * @return None. -*******************************************************************************/ -void RDKRL78G14_Reset(void) + *******************************************************************************/ +void +RDKRL78G14_Reset(void) { - short delay = 0; + short delay = 0; - EXTRST_HIGH; - for(delay = 0; delay < 1000; delay++) - { - NOP; - } - EXTRST_LOW; + 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) + *******************************************************************************/ +char +RDKRL78G14_Init(void) { - long delay = 0; - char status = -1; + long delay = 0; + char status = -1; - for(delay = 0; delay < 4000000; delay++) - { - NOP; - } - RDKRL78G14_Reset(); - status = 0; + for(delay = 0; delay < 4000000; delay++) { + NOP; + } + RDKRL78G14_Reset(); + status = 0; - return status; + return status; } diff --git a/RDKRL78G14.h b/RDKRL78G14.h index c7eb230e2..75242bab1 100644 --- a/RDKRL78G14.h +++ b/RDKRL78G14.h @@ -2,7 +2,7 @@ * @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. @@ -36,9 +36,9 @@ * 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 __RDKRL78G14_H__ #define __RDKRL78G14_H__ @@ -47,78 +47,78 @@ /***************************** Include Files **********************************/ /******************************************************************************/ -#include // R5F104PJ definitions -#include // Declarations of extended SFR registers -#include // Declarations of intrinsic functions +#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 +#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 +#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 +#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 +#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 +#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_PIN (1 << 1) #define PMOD1_MISO ((P7 & PMOD1_MISO_PIN) >> 1) /* PMOD1 GPIO1 Pin - P47 */ #define PMOD1_GPIO1_PIN (1 << 7) #define PMOD1_GPIO1_PIN_OUT PM4 &= ~PMOD1_GPIO1_PIN; -#define PMOD1_GPIO1_LOW P4 &= ~PMOD1_GPIO1_PIN; -#define PMOD1_GPIO1_HIGH P4 |= PMOD1_GPIO1_PIN; +#define PMOD1_GPIO1_LOW P4 &= ~PMOD1_GPIO1_PIN; +#define PMOD1_GPIO1_HIGH P4 |= PMOD1_GPIO1_PIN; /* PMOD1 GPIO2 Pin - P46 */ #define PMOD1_GPIO2_PIN (1 << 6) #define PMOD1_GPIO2_PIN_OUT PM4 &= ~PMOD1_GPIO2_PIN; -#define PMOD1_GPIO2_LOW P4 &= ~PMOD1_GPIO2_PIN; -#define PMOD1_GPIO2_HIGH P4 |= PMOD1_GPIO2_PIN; +#define PMOD1_GPIO2_LOW P4 &= ~PMOD1_GPIO2_PIN; +#define PMOD1_GPIO2_HIGH P4 |= PMOD1_GPIO2_PIN; /* PMOD1 GPIO3 Pin - P110 */ #define PMOD1_GPIO3_PIN (1 << 0) #define PMOD1_GPIO3_PIN_OUT PM11 &= ~PMOD1_GPIO3_PIN; -#define PMOD1_GPIO3_LOW P11 &= ~PMOD1_GPIO3_PIN; -#define PMOD1_GPIO3_HIGH P11 |= PMOD1_GPIO3_PIN; +#define PMOD1_GPIO3_LOW P11 &= ~PMOD1_GPIO3_PIN; +#define PMOD1_GPIO3_HIGH P11 |= PMOD1_GPIO3_PIN; /* PMOD1 GPIO4 Pin - P111 */ #define PMOD1_GPIO4_PIN (1 << 1) #define PMOD1_GPIO4_PIN_OUT PM11 &= ~PMOD1_GPIO4_PIN; -#define PMOD1_GPIO4_LOW P11 &= ~PMOD1_GPIO4_PIN; -#define PMOD1_GPIO4_HIGH P11 |= PMOD1_GPIO4_PIN; +#define PMOD1_GPIO4_LOW P11 &= ~PMOD1_GPIO4_PIN; +#define PMOD1_GPIO4_HIGH P11 |= PMOD1_GPIO4_PIN; /* 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 +#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 /******************************************************************************/ /************************ Functions Declarations ******************************/ @@ -130,4 +130,4 @@ void RDKRL78G14_Reset(void); /*! Initializes the RDKRL78G14. */ char RDKRL78G14_Init(void); -#endif // __RDKRL78G14_H__ +#endif /* __RDKRL78G14_H__ */ diff --git a/ST7579.c b/ST7579.c index eddc94660..4e8b85a4f 100644 --- a/ST7579.c +++ b/ST7579.c @@ -2,7 +2,7 @@ * @file ST7579.c * @brief Implementation of ST7579 Driver. * @author DBogdan (dragos.bogdan@analog.com) -******************************************************************************** + ******************************************************************************** * Copyright 2012(c) Analog Devices, Inc. * * All rights reserved. @@ -36,16 +36,16 @@ * 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 +#include "ST7579.h" /* ST7579 definitions */ +#include "RDKRL78G14.h" /* YRDKRL78G14 definitions */ +#include "Communication.h" /* Communication definitions */ /******************************************************************************/ /************************* Variables Definitions ******************************/ @@ -53,101 +53,101 @@ 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} // ~ + { 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 } /* ~ */ }; /******************************************************************************/ @@ -160,14 +160,14 @@ const unsigned char st7579Font[95][5] = * @param data - Data to transmit. * * @return None. -*******************************************************************************/ -void ST7579_WriteByte(unsigned char data) + *******************************************************************************/ +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. + 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. * @@ -175,94 +175,90 @@ void ST7579_WriteByte(unsigned char data) * @param xPosition - X address of RAM. * * @return None. -*******************************************************************************/ -void ST7579_GoTo(unsigned char yPosition, - unsigned char xPosition) + *******************************************************************************/ +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; + 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) + *******************************************************************************/ +void +ST7579_Clear(void) { - unsigned short clearPosition = 0; - unsigned char yPosition = 0; + 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); + 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: 0 - if initialization was successful; * -1 - if initialization was unsuccessful. -*******************************************************************************/ -char ST7579_Init(void) + *******************************************************************************/ +char +ST7579_Init(void) { - char status = -1; - unsigned short delay = 0; - - status = SPI_Init(0, // Transfer format. - 1000000, // SPI clock frequency. - 0, // SPI clock polarity. - 1); // SPI clock edge. - if(status != 0) - { - 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(); + char status = -1; + unsigned short delay = 0; + status = SPI_Init(0, /* Transfer format. */ + 1000000, /* SPI clock frequency. */ + 0, /* SPI clock polarity. */ + 1); /* SPI clock edge. */ + if(status != 0) { 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. * @@ -272,66 +268,60 @@ char ST7579_Init(void) * @param bigFont - Big font selection. * * @return None. -*******************************************************************************/ -void ST7579_Char(unsigned char yPosition, - unsigned char xPosition, - unsigned char character, - unsigned char bigFont) + *******************************************************************************/ +void +ST7579_Char(unsigned char yPosition, + unsigned char xPosition, + unsigned char character, + unsigned char bigFont) { - unsigned char column = 0; - unsigned char data = 0; + 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); + 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); } - 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); + 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. * @@ -341,20 +331,19 @@ void ST7579_Char(unsigned char yPosition, * @param bigFont - Big font selection. * * @return None. -*******************************************************************************/ -void ST7579_String(unsigned char yPosition, - unsigned char xPosition, - unsigned char* string, - unsigned char bigFont) + *******************************************************************************/ +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); - } + 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. * @@ -364,47 +353,39 @@ void ST7579_String(unsigned char yPosition, * @param bigFont - Big font selection. * * @return None. -*******************************************************************************/ -void ST7579_Number(unsigned char yPosition, - unsigned char xPosition, - long number, - unsigned char bigFont) + *******************************************************************************/ +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; + unsigned long mask = 1000000000; + unsigned char chNumber = 10; + unsigned char chIndex = 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); + 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. * @@ -415,79 +396,65 @@ void ST7579_Number(unsigned char yPosition, * @param bigFont - Big font selection. * * @return None. -*******************************************************************************/ -void ST7579_FloatNumber(unsigned char yPosition, - unsigned char xPosition, - float number, - unsigned char resolution, - unsigned char bigFont) + *******************************************************************************/ +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; + 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); + for(index = 0; index < resolution; index++) { + multiplication *= 10; + } + display = (long)(number * multiplication); + if(display < 0) { + ST7579_Char(yPosition, xPosition, '-', bigFont); + xPosition += 6 + (bigFont * 12); + display *= -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); - display *= -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); - } - return; - } - else - { - ST7579_Char(yPosition, xPosition, '+', bigFont); - xPosition += 6 + (bigFont * 12); - } - } - while((mask > display) && (chNumber > resolution)) - { - 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; + } + for(index = 0; index < resolution; index++) { + ST7579_Char(yPosition, xPosition, '0', bigFont); xPosition += 6 + (bigFont * 12); - if((multiplication != 1) && (mask == (multiplication / 10))) - { - ST7579_Char(yPosition, xPosition, '.', bigFont); - xPosition += 6 + (bigFont * 12); - } + } + return; + } else { + ST7579_Char(yPosition, xPosition, '+', bigFont); + xPosition += 6 + (bigFont * 12); } + } + while((mask > display) && (chNumber > resolution)) { + 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. * @@ -497,45 +464,39 @@ void ST7579_FloatNumber(unsigned char yPosition, * @param bigFont - Big font selection. * * @return None. -*******************************************************************************/ -void ST7579_HexNumber(unsigned char yPosition, - unsigned char xPosition, - long number, - unsigned char bigFont) + *******************************************************************************/ +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; + 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); + 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. * @@ -546,23 +507,22 @@ void ST7579_HexNumber(unsigned char yPosition, * @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) + *******************************************************************************/ +void +ST7579_Image(unsigned char yPosition, + unsigned char xPosition, + const unsigned char image[], + unsigned char width, + unsigned char height) { - unsigned short index = 0; + 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]); + 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 index 566b40d48..92a47bfde 100644 --- a/ST7579.h +++ b/ST7579.h @@ -2,7 +2,7 @@ * @file ST7579.h * @brief Header file of ST7579 Driver. * @author DBogdan (dragos.bogdan@analog.com) -******************************************************************************** + ******************************************************************************** * Copyright 2012(c) Analog Devices, Inc. * * All rights reserved. @@ -36,9 +36,9 @@ * 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__ @@ -68,7 +68,7 @@ void ST7579_Char(unsigned char yPosition, /*! Sends a string to ST7579 controller. */ void ST7579_String(unsigned char yPosition, unsigned char xPosition, - unsigned char* string, + unsigned char *string, unsigned char bigFont); /*! Sends an integer number to ST7579 controller. */ @@ -97,4 +97,4 @@ void ST7579_Image(unsigned char yPosition, unsigned char width, unsigned char height); -#endif // __ST7579_H__ +#endif /* __ST7579_H__ */ diff --git a/TIME.c b/TIME.c index c2c4a515f..30c352b5d 100644 --- a/TIME.c +++ b/TIME.c @@ -2,7 +2,7 @@ * @file TIME.c * @brief Implementation of TIME Driver for RENESAS RL78G14 Processor. * @author Dan Nechita -******************************************************************************** + ******************************************************************************** * Copyright 2012(c) Analog Devices, Inc. * * All rights reserved. @@ -36,15 +36,15 @@ * 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 "RDKRL78G14.h" // RDKRL78G14 definitions. -#include "TIME.h" // TIME definitions. +#include "RDKRL78G14.h" /* RDKRL78G14 definitions. */ +#include "TIME.h" /* TIME definitions. */ /*****************************************************************************/ /************************** Macros Definitions *******************************/ @@ -64,104 +64,101 @@ unsigned short overflowCounter = 0; * @brief INTTM00 interrupt service routine. * * @return None. -*******************************************************************************/ + *******************************************************************************/ #pragma vector = INTTM00_vect -__interrupt static void Timer0InterruptHandler(void) +__interrupt static void +Timer0InterruptHandler(void) { - overflowCounter++; + overflowCounter++; } - /***************************************************************************//** * @brief Initializes the timer used in this driver. * * @return status - Result of the initialization procedure. * Example: 0 - if initialization was successful; * -1 - if initialization was unsuccessful. -*******************************************************************************/ -char TIME_Init(void) + *******************************************************************************/ +char +TIME_Init(void) { - PER0 |= 0x0001; // Enable Supply for Unit 0 that contains timers 0..7. - TT0 |= 0x0001; // Stop channel 0(Timer 0). - TPS0 = 0x0005; // CK00 = FCLK / 32. - TMR00 |= 0x0000; // CK00 input clock for channel 0. - TMMK00 = 1; // Disable INTTM00 interrupt. - TMIF00 = 0; // Clear INTM00 interrupt flag. - /* Set INTTM00 low priority */ - TMPR100 = 1; - TMPR000 = 1; - /* Configure channel 0 as a interval timer. */ - TMR00 |= 0x0000; // Interval timer mode. - TO0 &= ~0x0001; // Timer 0 output value is "0". - TOE0 &= ~0x0001; // Disable output of timer 0. - TMMK00 = 0; // Enable INTTM00 interrupt. - - return 0; -} + PER0 |= 0x0001; /* Enable Supply for Unit 0 that contains timers 0..7. */ + TT0 |= 0x0001; /* Stop channel 0(Timer 0). */ + TPS0 = 0x0005; /* CK00 = FCLK / 32. */ + TMR00 |= 0x0000; /* CK00 input clock for channel 0. */ + TMMK00 = 1; /* Disable INTTM00 interrupt. */ + TMIF00 = 0; /* Clear INTM00 interrupt flag. */ + /* Set INTTM00 low priority */ + TMPR100 = 1; + TMPR000 = 1; + /* Configure channel 0 as a interval timer. */ + TMR00 |= 0x0000; /* Interval timer mode. */ + TO0 &= ~0x0001; /* Timer 0 output value is "0". */ + TOE0 &= ~0x0001; /* Disable output of timer 0. */ + TMMK00 = 0; /* Enable INTTM00 interrupt. */ + return 0; +} /***************************************************************************//** * @brief The timer begins to count in steps of microseconds(us) until the user * calls a stop measurement function. * * @return None. -*******************************************************************************/ -void TIME_StartMeasure(void) + *******************************************************************************/ +void +TIME_StartMeasure(void) { - TDR00 = 0xFFFF; - overflowCounter = 0; - TS0 |= 0x0001; // Start timer 0. - TMIF00 = 0; // Clear INTM00 interrupt flag. + TDR00 = 0xFFFF; + overflowCounter = 0; + TS0 |= 0x0001; /* Start timer 0. */ + TMIF00 = 0; /* Clear INTM00 interrupt flag. */ } - /***************************************************************************//** * @brief Stops the measurement process when the functions is called. * * @return Time(in microseconds) elapsed since the measurement began. -*******************************************************************************/ -unsigned long TIME_StopMeasure(void) + *******************************************************************************/ +unsigned long +TIME_StopMeasure(void) { - unsigned long elapsedUs = 0; - unsigned short timerCnt = 0; - - timerCnt = TCR00; - TT0 |= 0x0001; // Stop Timer 0. - TMIF00 = 0; // Clear INTM00 interrupt flag. - overflowCounter = 0; - elapsedUs = ((unsigned long)overflowCounter * TIMER_CNT_INTERVAL) + - (0xFFFF - timerCnt); - - return elapsedUs; -} + unsigned long elapsedUs = 0; + unsigned short timerCnt = 0; + timerCnt = TCR00; + TT0 |= 0x0001; /* Stop Timer 0. */ + TMIF00 = 0; /* Clear INTM00 interrupt flag. */ + overflowCounter = 0; + elapsedUs = ((unsigned long)overflowCounter * TIMER_CNT_INTERVAL) + + (0xFFFF - timerCnt); + + return elapsedUs; +} /***************************************************************************//** * @brief Creates a delay of microseconds. * * @return None. -*******************************************************************************/ -void TIME_DelayUs(unsigned short usUnits) + *******************************************************************************/ +void +TIME_DelayUs(unsigned short usUnits) { - TDR00 = usUnits; - TS0 |= 0x0001; // Start timer 0. - while(!overflowCounter) - { - ; - } - overflowCounter = 0; - TT0 |= 0x0001; // Stop Timer 0. + TDR00 = usUnits; + TS0 |= 0x0001; /* Start timer 0. */ + while(!overflowCounter) { + } + overflowCounter = 0; + TT0 |= 0x0001; /* Stop Timer 0. */ } - /***************************************************************************//** * @brief Creates a delay of milliseconds. * * @return None. -*******************************************************************************/ -void TIME_DelayMs(unsigned short msUnits) + *******************************************************************************/ +void +TIME_DelayMs(unsigned short msUnits) { - TDR00 = 0x3E7; // 0x3E7 = 999(decimal). Timer will count down to 0. - TS0 |= 0x0001; // Start timer 0. - while(overflowCounter < msUnits) - { - ; - } - overflowCounter = 0; - TT0 |= 0x0001; // Stop Timer 0. + TDR00 = 0x3E7; /* 0x3E7 = 999(decimal). Timer will count down to 0. */ + TS0 |= 0x0001; /* Start timer 0. */ + while(overflowCounter < msUnits) { + } + overflowCounter = 0; + TT0 |= 0x0001; /* Stop Timer 0. */ } diff --git a/TIME.h b/TIME.h index cc60f09a5..8b3037701 100644 --- a/TIME.h +++ b/TIME.h @@ -2,7 +2,7 @@ * @file TIME.h * @brief Header file of TIME Driver for RENESAS RL78G14 Processor. * @author Dan Nechita -******************************************************************************** + ******************************************************************************** * Copyright 2012(c) Analog Devices, Inc. * * All rights reserved. @@ -36,9 +36,9 @@ * 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 __TIME_H__ #define __TIME_H__ @@ -49,7 +49,7 @@ /*! Initializes the timer used in this driver. */ char TIME_Init(void); -/*! The timer begins to count in steps of microseconds(us) until the user calls +/*! The timer begins to count in steps of microseconds(us) until the user calls a stop measurement function. */ void TIME_StartMeasure(void); From cfd554dc24d1d98a350862adc7a2f1bd8674550e Mon Sep 17 00:00:00 2001 From: Dragos Bogdan Date: Sat, 4 Jan 2014 17:27:52 -0500 Subject: [PATCH 4/4] Move files. --- RDKRL78G14.c | 88 ---- RDKRL78G14.h | 133 ----- ST7579.c | 528 -------------------- ST7579.h | 100 ---- TIME.c | 164 ------ TIME.h | 65 --- Communication.c => cpu/rl78/Communication.c | 0 Communication.h => cpu/rl78/Communication.h | 0 8 files changed, 1078 deletions(-) delete mode 100644 RDKRL78G14.c delete mode 100644 RDKRL78G14.h delete mode 100644 ST7579.c delete mode 100644 ST7579.h delete mode 100644 TIME.c delete mode 100644 TIME.h rename Communication.c => cpu/rl78/Communication.c (100%) rename Communication.h => cpu/rl78/Communication.h (100%) diff --git a/RDKRL78G14.c b/RDKRL78G14.c deleted file mode 100644 index 3be586c51..000000000 --- a/RDKRL78G14.c +++ /dev/null @@ -1,88 +0,0 @@ -/***************************************************************************//** - * @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: $WCREV$ - *******************************************************************************/ - -/******************************************************************************/ -/***************************** 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 deleted file mode 100644 index 75242bab1..000000000 --- a/RDKRL78G14.h +++ /dev/null @@ -1,133 +0,0 @@ -/***************************************************************************//** - * @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: $WCREV$ - *******************************************************************************/ - -#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) - -/* PMOD1 GPIO1 Pin - P47 */ -#define PMOD1_GPIO1_PIN (1 << 7) -#define PMOD1_GPIO1_PIN_OUT PM4 &= ~PMOD1_GPIO1_PIN; -#define PMOD1_GPIO1_LOW P4 &= ~PMOD1_GPIO1_PIN; -#define PMOD1_GPIO1_HIGH P4 |= PMOD1_GPIO1_PIN; - -/* PMOD1 GPIO2 Pin - P46 */ -#define PMOD1_GPIO2_PIN (1 << 6) -#define PMOD1_GPIO2_PIN_OUT PM4 &= ~PMOD1_GPIO2_PIN; -#define PMOD1_GPIO2_LOW P4 &= ~PMOD1_GPIO2_PIN; -#define PMOD1_GPIO2_HIGH P4 |= PMOD1_GPIO2_PIN; - -/* PMOD1 GPIO3 Pin - P110 */ -#define PMOD1_GPIO3_PIN (1 << 0) -#define PMOD1_GPIO3_PIN_OUT PM11 &= ~PMOD1_GPIO3_PIN; -#define PMOD1_GPIO3_LOW P11 &= ~PMOD1_GPIO3_PIN; -#define PMOD1_GPIO3_HIGH P11 |= PMOD1_GPIO3_PIN; - -/* PMOD1 GPIO4 Pin - P111 */ -#define PMOD1_GPIO4_PIN (1 << 1) -#define PMOD1_GPIO4_PIN_OUT PM11 &= ~PMOD1_GPIO4_PIN; -#define PMOD1_GPIO4_LOW P11 &= ~PMOD1_GPIO4_PIN; -#define PMOD1_GPIO4_HIGH P11 |= PMOD1_GPIO4_PIN; - -/* 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 - -/******************************************************************************/ -/************************ 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 deleted file mode 100644 index 4e8b85a4f..000000000 --- a/ST7579.c +++ /dev/null @@ -1,528 +0,0 @@ -/***************************************************************************//** - * @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: 0 - if initialization was successful; - * -1 - if initialization was unsuccessful. - *******************************************************************************/ -char -ST7579_Init(void) -{ - char status = -1; - unsigned short delay = 0; - - status = SPI_Init(0, /* Transfer format. */ - 1000000, /* SPI clock frequency. */ - 0, /* SPI clock polarity. */ - 1); /* SPI clock edge. */ - if(status != 0) { - 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; - - 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); - display *= -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); - } - return; - } else { - ST7579_Char(yPosition, xPosition, '+', bigFont); - xPosition += 6 + (bigFont * 12); - } - } - while((mask > display) && (chNumber > resolution)) { - 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 deleted file mode 100644 index 92a47bfde..000000000 --- a/ST7579.h +++ /dev/null @@ -1,100 +0,0 @@ -/***************************************************************************//** - * @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. */ -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__ */ diff --git a/TIME.c b/TIME.c deleted file mode 100644 index 30c352b5d..000000000 --- a/TIME.c +++ /dev/null @@ -1,164 +0,0 @@ -/***************************************************************************//** - * @file TIME.c - * @brief Implementation of TIME Driver for RENESAS RL78G14 Processor. - * @author Dan Nechita - ******************************************************************************** - * 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 "RDKRL78G14.h" /* RDKRL78G14 definitions. */ -#include "TIME.h" /* TIME definitions. */ - -/*****************************************************************************/ -/************************** Macros Definitions *******************************/ -/*****************************************************************************/ -#define TIMER_CNT_INTERVAL 65536 - -/*****************************************************************************/ -/************************ Variables Declarations *****************************/ -/*****************************************************************************/ -unsigned short overflowCounter = 0; - -/******************************************************************************/ -/************************ Functions Definitions *******************************/ -/******************************************************************************/ - -/***************************************************************************//** - * @brief INTTM00 interrupt service routine. - * - * @return None. - *******************************************************************************/ -#pragma vector = INTTM00_vect -__interrupt static void -Timer0InterruptHandler(void) -{ - overflowCounter++; -} -/***************************************************************************//** - * @brief Initializes the timer used in this driver. - * - * @return status - Result of the initialization procedure. - * Example: 0 - if initialization was successful; - * -1 - if initialization was unsuccessful. - *******************************************************************************/ -char -TIME_Init(void) -{ - PER0 |= 0x0001; /* Enable Supply for Unit 0 that contains timers 0..7. */ - TT0 |= 0x0001; /* Stop channel 0(Timer 0). */ - TPS0 = 0x0005; /* CK00 = FCLK / 32. */ - TMR00 |= 0x0000; /* CK00 input clock for channel 0. */ - TMMK00 = 1; /* Disable INTTM00 interrupt. */ - TMIF00 = 0; /* Clear INTM00 interrupt flag. */ - /* Set INTTM00 low priority */ - TMPR100 = 1; - TMPR000 = 1; - /* Configure channel 0 as a interval timer. */ - TMR00 |= 0x0000; /* Interval timer mode. */ - TO0 &= ~0x0001; /* Timer 0 output value is "0". */ - TOE0 &= ~0x0001; /* Disable output of timer 0. */ - TMMK00 = 0; /* Enable INTTM00 interrupt. */ - - return 0; -} -/***************************************************************************//** - * @brief The timer begins to count in steps of microseconds(us) until the user - * calls a stop measurement function. - * - * @return None. - *******************************************************************************/ -void -TIME_StartMeasure(void) -{ - TDR00 = 0xFFFF; - overflowCounter = 0; - TS0 |= 0x0001; /* Start timer 0. */ - TMIF00 = 0; /* Clear INTM00 interrupt flag. */ -} -/***************************************************************************//** - * @brief Stops the measurement process when the functions is called. - * - * @return Time(in microseconds) elapsed since the measurement began. - *******************************************************************************/ -unsigned long -TIME_StopMeasure(void) -{ - unsigned long elapsedUs = 0; - unsigned short timerCnt = 0; - - timerCnt = TCR00; - TT0 |= 0x0001; /* Stop Timer 0. */ - TMIF00 = 0; /* Clear INTM00 interrupt flag. */ - overflowCounter = 0; - elapsedUs = ((unsigned long)overflowCounter * TIMER_CNT_INTERVAL) + - (0xFFFF - timerCnt); - - return elapsedUs; -} -/***************************************************************************//** - * @brief Creates a delay of microseconds. - * - * @return None. - *******************************************************************************/ -void -TIME_DelayUs(unsigned short usUnits) -{ - TDR00 = usUnits; - TS0 |= 0x0001; /* Start timer 0. */ - while(!overflowCounter) { - } - overflowCounter = 0; - TT0 |= 0x0001; /* Stop Timer 0. */ -} -/***************************************************************************//** - * @brief Creates a delay of milliseconds. - * - * @return None. - *******************************************************************************/ -void -TIME_DelayMs(unsigned short msUnits) -{ - TDR00 = 0x3E7; /* 0x3E7 = 999(decimal). Timer will count down to 0. */ - TS0 |= 0x0001; /* Start timer 0. */ - while(overflowCounter < msUnits) { - } - overflowCounter = 0; - TT0 |= 0x0001; /* Stop Timer 0. */ -} diff --git a/TIME.h b/TIME.h deleted file mode 100644 index 8b3037701..000000000 --- a/TIME.h +++ /dev/null @@ -1,65 +0,0 @@ -/***************************************************************************//** - * @file TIME.h - * @brief Header file of TIME Driver for RENESAS RL78G14 Processor. - * @author Dan Nechita - ******************************************************************************** - * 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 __TIME_H__ -#define __TIME_H__ - -/******************************************************************************/ -/************************ Functions Declarations ******************************/ -/******************************************************************************/ - -/*! Initializes the timer used in this driver. */ -char TIME_Init(void); - -/*! The timer begins to count in steps of microseconds(us) until the user calls - a stop measurement function. */ -void TIME_StartMeasure(void); - -/*! Stops the measurement process when the functions is called. */ -unsigned long TIME_StopMeasure(void); - -/*! Creates a delay of microseconds. */ -void TIME_DelayUs(unsigned short usUnits); - -/*! Creates a delay of milliseconds. */ -void TIME_DelayMs(unsigned short msUnits); - -#endif /* __TIME_H__ */ diff --git a/Communication.c b/cpu/rl78/Communication.c similarity index 100% rename from Communication.c rename to cpu/rl78/Communication.c diff --git a/Communication.h b/cpu/rl78/Communication.h similarity index 100% rename from Communication.h rename to cpu/rl78/Communication.h