Grissiom f51bce3fed add rm48x50 bsp and libcpu
We currently only support building with CCS and SCons is not using.
bsp/rm48x50/HALCoGen/HALCoGen.{hcg,dil} is the HALCoGen project file.
You may need to regenerate the source file as you like, providing that:

    1, IRQ is in Dispatch Mode and the table entry is IRQ_Handler. The
    channel 5 in enabled and connected to IRQ.

    2, RTI driver is enabled and compare3 source is selected to counter1
    and the compare3 will generate tick in the period of 10ms. This
    value is coresponding with RT_TICK_PER_SECOND in rtconfig.h.

In CCS, you need to create a new CCS project and create link folders
pointing at bsp/rm48x50, libcpu/arm/rm48x50 and src/, include/. Remember
to add the include path to the Build Properties.
2013-05-24 22:55:13 +08:00

422 lines
12 KiB
C

/** @file gio.c
* @brief GIO Driver Implementation File
* @date 23.May.2013
* @version 03.05.01
*
*/
/* (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 */