rt-thread/bsp/rm48x50/HALCoGen/source/gio.c

422 lines
12 KiB
C

/** @file gio.c
* @brief GIO Driver Implementation File
* @date 29.May.2013
* @version 03.05.02
*
*/
/* (c) Texas Instruments 2009-2013, All rights reserved. */
/* USER CODE BEGIN (0) */
/* USER CODE END */
#include "gio.h"
/* USER CODE BEGIN (1) */
/* USER CODE END */
/** @fn void gioInit(void)
* @brief Initializes the GIO Driver
*
* This function initializes the GIO module and set the GIO ports
* to the initial values.
*/
/* SourceId : GIO_SourceId_001 */
/* Requirements : HL_SR115, HL_SR116, HL_SR117, HL_SR118, HL_SR119, HL_SR120, HL_SR121, HL_SR122 */
void gioInit(void)
{
/* USER CODE BEGIN (2) */
/* USER CODE END */
/** bring GIO module out of reset */
gioREG->GCR0 = 1U;
gioREG->INTENACLR = 0xFFU;
gioREG->LVLCLR = 0xFFU;
/** @b initialize @b Port @b A */
/** - Port A output values */
gioPORTA->DOUT = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port A direction */
gioPORTA->DIR = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port A open drain enable */
gioPORTA->PDR = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port A pullup / pulldown selection */
gioPORTA->PSL = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port A pullup / pulldown enable*/
gioPORTA->PULDIS = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** @b initialize @b Port @b B */
/** - Port B output values */
gioPORTB->DOUT = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port B direction */
gioPORTB->DIR = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port B open drain enable */
gioPORTB->PDR = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port B pullup / pulldown selection */
gioPORTB->PSL = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/** - Port B pullup / pulldown enable*/
gioPORTB->PULDIS = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U); /* Bit 7 */
/* USER CODE BEGIN (3) */
/* USER CODE END */
/** @b initialize @b interrupts */
/** - interrupt polarity */
gioREG->POL = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U) /* Bit 7 */
| (0U << 8U) /* Bit 8 */
| (0U << 9U) /* Bit 9 */
| (0U << 10U) /* Bit 10 */
| (0U << 11U) /* Bit 11 */
| (0U << 12U) /* Bit 12 */
| (0U << 13U) /* Bit 13 */
| (0U << 14U) /* Bit 14 */
| (0U << 15U);/* Bit 15 */
/** - interrupt level */
gioREG->LVLSET = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U) /* Bit 7 */
| (0U << 8U) /* Bit 8 */
| (0U << 9U) /* Bit 9 */
| (0U << 10U) /* Bit 10 */
| (0U << 11U) /* Bit 11 */
| (0U << 12U) /* Bit 12 */
| (0U << 13U) /* Bit 13 */
| (0U << 14U) /* Bit 14 */
| (0U << 15U);/* Bit 15 */
/** - clear all pending interrupts */
gioREG->FLG = 0xFFU;
/** - enable interrupts */
gioREG->INTENASET = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U) /* Bit 7 */
| (0U << 8U) /* Bit 8 */
| (0U << 9U) /* Bit 9 */
| (0U << 10U) /* Bit 10 */
| (0U << 11U) /* Bit 11 */
| (0U << 12U) /* Bit 12 */
| (0U << 13U) /* Bit 13 */
| (0U << 14U) /* Bit 14 */
| (0U << 15U);/* Bit 15 */
/* USER CODE BEGIN (4) */
/* USER CODE END */
}
/** @fn void gioSetDirection(gioPORT_t *port, uint32 dir)
* @brief Set Port Direction
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
* @param[in] dir value to write to DIR register
*
* Set the direction of GIO pins at runtime.
*/
/* SourceId : GIO_SourceId_002 */
/* Requirements : HL_SR123 */
void gioSetDirection(gioPORT_t *port, uint32 dir)
{
port->DIR = dir;
}
/** @fn void gioSetBit(gioPORT_t *port, uint32 bit, uint32 value)
* @brief Write Bit
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
* @param[in] bit number 0-7 that specifies the bit to be written to.
* - 0: LSB
* - 7: MSB
* @param[in] value binary value to write to bit
*
* Writes a value to the specified pin of the given GIO port
*/
/* SourceId : GIO_SourceId_003 */
/* Requirements : HL_SR126 */
void gioSetBit(gioPORT_t *port, uint32 bit, uint32 value)
{
/* USER CODE BEGIN (5) */
/* USER CODE END */
if (value != 0U)
{
port->DSET = 1U << bit;
}
else
{
port->DCLR = 1U << bit;
}
}
/** @fn void gioSetPort(gioPORT_t *port, uint32 value)
* @brief Write Port Value
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
* @param[in] value value to write to port
*
* Writes a value to all pin of a given GIO port
*/
/* SourceId : GIO_SourceId_004 */
/* Requirements : HL_SR127 */
void gioSetPort(gioPORT_t *port, uint32 value)
{
/* USER CODE BEGIN (6) */
/* USER CODE END */
port->DOUT = value;
/* USER CODE BEGIN (7) */
/* USER CODE END */
}
/** @fn uint32 gioGetBit(gioPORT_t *port, uint32 bit)
* @brief Read Bit
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
* @param[in] bit number 0-7 that specifies the bit to be written to.
* - 0: LSB
* - 7: MSB
*
* Reads a the current value from the specified pin of the given GIO port
*/
/* SourceId : GIO_SourceId_005 */
/* Requirements : HL_SR124 */
uint32 gioGetBit(gioPORT_t *port, uint32 bit)
{
/* USER CODE BEGIN (8) */
/* USER CODE END */
return (port->DIN >> bit) & 1U;
}
/** @fn uint32 gioGetPort(gioPORT_t *port)
* @brief Read Port Value
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
*
* Reads a the current value of a given GIO port
*/
/* SourceId : GIO_SourceId_006 */
/* Requirements : HL_SR125 */
uint32 gioGetPort(gioPORT_t *port)
{
/* USER CODE BEGIN (9) */
/* USER CODE END */
return port->DIN;
}
/** @fn void gioToggleBit(gioPORT_t *port, uint32 bit)
* @brief Write Bit
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
* @param[in] bit number 0-7 that specifies the bit to be written to.
* - 0: LSB
* - 7: MSB
*
* Toggle a value to the specified pin of the given GIO port
*/
/* SourceId : GIO_SourceId_007 */
/* Requirements : */
void gioToggleBit(gioPORT_t *port, uint32 bit)
{
/* USER CODE BEGIN (10) */
/* USER CODE END */
if ((port->DIN & (1U << bit)) != 0U)
{
port->DCLR = 1U << bit;
}
else
{
port->DSET = 1U << bit;
}
}
/** @fn void gioEnableNotification(uint32 bit)
* @brief Enable Interrupt
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
* @param[in] bit interrupt pin to enable
* - 0: LSB
* - 7: MSB
*
* Enables an interrupt pin of selected port
*/
/* SourceId : GIO_SourceId_008 */
/* Requirements : HL_SR128 */
void gioEnableNotification(gioPORT_t *port, uint32 bit)
{
/* USER CODE BEGIN (11) */
/* USER CODE END */
if (port == gioPORTA)
{
gioREG->INTENASET = 1U << bit;
}
else if (port == gioPORTB)
{
gioREG->INTENASET = 1U << (bit + 8);
}
else
{
/* Empty */
}
}
/** @fn void gioDisableNotification(uint32 bit)
* @brief Disable Interrupt
* @param[in] port pointer to GIO port:
* - gioPORTA: PortA pointer
* - gioPORTB: PortB pointer
* @param[in] bit interrupt pin to enable
* - 0: LSB
* - 7: MSB
*
* Disables an interrupt pin of selected port
*/
/* SourceId : GIO_SourceId_009 */
/* Requirements : HL_SR129 */
void gioDisableNotification(gioPORT_t *port, uint32 bit)
{
/* USER CODE BEGIN (12) */
/* USER CODE END */
if (port == gioPORTA)
{
gioREG->INTENACLR = 1U << bit;
}
else if (port == gioPORTB)
{
gioREG->INTENACLR = 1U << (bit + 8);
}
else
{
/* Empty */
}
}
/* USER CODE BEGIN (19) */
/* USER CODE END */