You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
422 lines
12 KiB
422 lines
12 KiB
5 months ago
|
/** @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 */
|