Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4980a1471c | |||
| bbad2ee6eb | |||
| 24158d1f0f | |||
| a6f7159189 | |||
| 2c5d034e05 |
@@ -74,13 +74,18 @@
|
||||
#endif
|
||||
|
||||
const PIN_Config BoardGpioInitTable[] = {
|
||||
Board_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
|
||||
Board_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
|
||||
Board_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX */
|
||||
Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX */
|
||||
Board_SRDY | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* SRDY */
|
||||
Board_MRDY | PIN_INPUT_EN | PIN_PULLDOWN, /* MRDY */
|
||||
PIN_TERMINATE
|
||||
ADC_EOC | PIN_INPUT_EN | PIN_PULLDOWN,
|
||||
LSK_CS | PIN_INPUT_EN | PIN_PULLDOWN, // SPI0_LSK
|
||||
ASK_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MAX, // SPI1_ASK
|
||||
ADC_CLK | PIN_INPUT_EN | PIN_PULLDOWN, // ADC_CLK
|
||||
PWR_CHECK | PIN_INPUT_EN | PIN_PULLDOWN,
|
||||
LSK_CLK | PIN_INPUT_EN | PIN_PULLDOWN, // after lsk and lsk_manchester xor lsk_clk
|
||||
LSK | PIN_INPUT_EN | PIN_PULLDOWN, // SPI0 to receive LSK
|
||||
CLOCK_8M | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
ASK | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, // SPI1 to transmit ASK
|
||||
RESET | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
TRIGGER | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
PIN_TERMINATE
|
||||
};
|
||||
|
||||
const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
|
||||
@@ -220,6 +225,20 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[BOOSTXL_CC2650MA_UDMACOUNT] = {
|
||||
.clkPin = Board_SPI0_CLK,
|
||||
.csnPin = Board_SPI0_CS
|
||||
},
|
||||
{
|
||||
.baseAddr = SSI1_BASE,
|
||||
.intNum = INT_SSI1_COMB,
|
||||
.intPriority = ~0,
|
||||
.swiPriority = 0,
|
||||
.powerMngrId = PowerCC26XX_PERIPH_SSI1,
|
||||
.defaultTxBufValue = 0,
|
||||
.rxChannelBitMask = 1<<UDMA_CHAN_SSI1_RX,
|
||||
.txChannelBitMask = 1<<UDMA_CHAN_SSI1_TX,
|
||||
.mosiPin = Board_SPI1_MOSI,
|
||||
.misoPin = Board_SPI1_MISO,
|
||||
.clkPin = Board_SPI1_CLK,
|
||||
.csnPin = Board_SPI1_CS
|
||||
},
|
||||
};
|
||||
|
||||
/* SPI configuration structure */
|
||||
@@ -423,3 +442,52 @@ const PWM_Config PWM_config[BOOSTXL_CC2650MA_PWMCOUNT + 1] = {
|
||||
/*
|
||||
* ============================= PWM end ======================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* ========================== ADCBuf begin =========================================
|
||||
*/
|
||||
/* Place into subsections to allow the TI linker to remove items properly */
|
||||
#if defined(__TI_COMPILER_VERSION__)
|
||||
#pragma DATA_SECTION(ADCBuf_config, ".const:ADCBuf_config")
|
||||
#pragma DATA_SECTION(adcBufCC26xxHWAttrs, ".const:adcBufCC26xxHWAttrs")
|
||||
#pragma DATA_SECTION(ADCBufCC26XX_adcChannelLut, ".const:ADCBufCC26XX_adcChannelLut")
|
||||
#endif
|
||||
|
||||
/* Include drivers */
|
||||
#include <ti/drivers/ADCBuf.h>
|
||||
#include <ti/drivers/adcbuf/ADCBufCC26XX.h>
|
||||
|
||||
/* ADCBuf objects */
|
||||
ADCBufCC26XX_Object adcBufCC26xxObjects[BOOSTXL_CC2650MA_ADCBufCOUNT];
|
||||
|
||||
/*
|
||||
* This table converts a virtual adc channel into a dio and internal analogue input signal.
|
||||
* This table is necessary for the functioning of the adcBuf driver.
|
||||
* Comment out unused entries to save flash.
|
||||
* Dio and internal signal pairs are hardwired. Do not remap them in the table. You may reorder entire entries though.
|
||||
* The mapping of dio and internal signals is package dependent.
|
||||
*/
|
||||
const ADCBufCC26XX_AdcChannelLutEntry ADCBufCC26XX_adcChannelLut[] = {
|
||||
{PIN_UNASSIGNED, ADC_COMPB_IN_VDDS},
|
||||
{PIN_UNASSIGNED, ADC_COMPB_IN_DCOUPL},
|
||||
{PIN_UNASSIGNED, ADC_COMPB_IN_VSS},
|
||||
{PWR_CHECK, ADC_COMPB_IN_AUXIO0},
|
||||
};
|
||||
|
||||
const ADCBufCC26XX_HWAttrs adcBufCC26xxHWAttrs[BOOSTXL_CC2650MA_ADCBufCOUNT] = {
|
||||
{
|
||||
.intPriority = ~0,
|
||||
.swiPriority = 0,
|
||||
.adcChannelLut = ADCBufCC26XX_adcChannelLut,
|
||||
.gpTimerUnit = Board_GPTIMER3A,
|
||||
.gptDMAChannelMask = 1 << UDMA_CHAN_TIMER0_A,
|
||||
}
|
||||
};
|
||||
|
||||
const ADCBuf_Config ADCBuf_config[] = {
|
||||
{&ADCBufCC26XX_fxnTable, &adcBufCC26xxObjects[0], &adcBufCC26xxHWAttrs[0]},
|
||||
{NULL, NULL, NULL},
|
||||
};
|
||||
/*
|
||||
* ========================== ADCBuf end =========================================
|
||||
*/
|
||||
|
||||
@@ -81,6 +81,22 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
#define DIO13 IOID_13
|
||||
#define DIO14 IOID_14
|
||||
|
||||
/*
|
||||
* Mapping of DIOs to Neulive pcb boards ( recording to schematic )
|
||||
*/
|
||||
|
||||
#define ADC_EOC IOID_2
|
||||
#define LSK_CS IOID_3 // SPI1_LSK
|
||||
#define ASK_CS IOID_4 // SPI0_ASK
|
||||
#define ADC_CLK IOID_6 // ADC_CLK
|
||||
#define PWR_CHECK IOID_8
|
||||
#define LSK_CLK IOID_9 // after lsk and lsk_manchester xor lsk_clk
|
||||
#define LSK IOID_10 // SPI1 to receive LSK
|
||||
#define CLOCK_8M IOID_11
|
||||
#define ASK IOID_12 // SPI0 to transmit ASK
|
||||
#define RESET IOID_13
|
||||
#define TRIGGER IOID_14
|
||||
|
||||
/* Mapping of pins to board signals using general board aliases
|
||||
* <board signal alias> <pin mapping>
|
||||
*/
|
||||
@@ -146,19 +162,24 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
#define Board_UART_RX Board_BP_UART_Tx /* TXD */
|
||||
|
||||
/* SPI Board */
|
||||
#define Board_SPI0_MISO Board_BP_SPI_MISO
|
||||
#define Board_SPI0_MOSI Board_BP_SPI_MOSI
|
||||
#define Board_SPI0_CLK Board_BP_SPI_CLK
|
||||
#define Board_SPI0_CS Board_BP_SPI_CS_Wireless
|
||||
#define Board_SPI0_MISO PIN_UNASSIGNED
|
||||
#define Board_SPI0_MOSI ASK
|
||||
#define Board_SPI0_CLK PIN_UNASSIGNED
|
||||
#define Board_SPI0_CS ASK_CS
|
||||
|
||||
#define Board_SPI1_MISO PIN_UNASSIGNED
|
||||
#define Board_SPI1_MOSI LSK
|
||||
#define Board_SPI1_CLK LSK_CLK
|
||||
#define Board_SPI1_CS LSK_CS
|
||||
|
||||
/* Power Management Board */
|
||||
#define Board_SRDY Board_BP_Pin_J2_19
|
||||
#define Board_MRDY Board_BP_Pin_J1_2
|
||||
|
||||
/* PWM outputs */
|
||||
#define Board_PWMPIN0 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN0 ADC_CLK
|
||||
#define Board_PWMPIN1 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN2 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN2 CLOCK_8M
|
||||
#define Board_PWMPIN3 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN4 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN5 PIN_UNASSIGNED
|
||||
@@ -170,6 +191,7 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
* ==========================================================================*/
|
||||
/* Generic SPI instance identifiers */
|
||||
#define Board_SPI0 BOOSTXL_CC2650MA_SPI0
|
||||
#define Board_SPI1 BOOSTXL_CC2650MA_SPI1
|
||||
/* Generic UART instance identifiers */
|
||||
#define Board_UART BOOSTXL_CC2650MA_UART0
|
||||
/* Generic TRNG instance identiifer */
|
||||
@@ -214,6 +236,7 @@ typedef enum BOOSTXL_CC2650MA_CryptoName {
|
||||
*/
|
||||
typedef enum BOOSTXL_CC2650MA_SPIName {
|
||||
BOOSTXL_CC2650MA_SPI0 = 0,
|
||||
BOOSTXL_CC2650MA_SPI1 ,
|
||||
|
||||
BOOSTXL_CC2650MA_SPICOUNT
|
||||
} BOOSTXL_CC2650MA_SPIName;
|
||||
@@ -243,7 +266,7 @@ typedef enum BOOSTXL_CC2650MA_UARTName {
|
||||
*/
|
||||
typedef enum BOOSTXL_CC2650MA_UdmaName {
|
||||
BOOSTXL_CC2650MA_UDMA0 = 0,
|
||||
|
||||
BOOSTXL_CC2650MA_UDMA1 ,
|
||||
BOOSTXL_CC2650MA_UDMACOUNT
|
||||
} BOOSTXL_CC2650MA_UdmaName;
|
||||
|
||||
@@ -294,6 +317,15 @@ typedef enum BOOSTXL_CC2650MA_PWM
|
||||
BOOSTXL_CC2650MA_PWMCOUNT
|
||||
} BOOSTXL_CC2650MA_PWM;
|
||||
|
||||
/*!
|
||||
* @def CC2650_LAUNCHXL_ADCBufName
|
||||
* @brief Enum of ADCs
|
||||
*/
|
||||
typedef enum BOOSTXL_CC2650MA_ADCBufName {
|
||||
BOOSTXL_CC2650MA_ADCBuf0 = 0,
|
||||
BOOSTXL_CC2650MA_ADCBufCOUNT
|
||||
} BOOSTXL_CC2650MA_ADCBufName;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
@@ -73,17 +73,18 @@
|
||||
#endif
|
||||
|
||||
const PIN_Config BoardGpioInitTable[] = {
|
||||
|
||||
Board_DK_LED3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
|
||||
Board_DK_LED4 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
|
||||
Board_KEY_SELECT | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */
|
||||
Board_KEY_UP | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */
|
||||
Board_KEY_DOWN | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */
|
||||
Board_KEY_LEFT | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */
|
||||
Board_KEY_RIGHT | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */
|
||||
Board_3V3_EN | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL, /* 3V3 domain off initially */
|
||||
Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX pin at inactive level */
|
||||
PIN_TERMINATE /* Terminate list */
|
||||
S2P_RST | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
P2S_RST | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
SPI_MOSI | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
SPI_MISO | PIN_INPUT_EN | PIN_PULLDOWN,
|
||||
SPI_CLK | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
Board_3V3_EN | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
Board_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN,
|
||||
Board_DK_LED3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
Board_DK_LED4 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
|
||||
PIN_TERMINATE
|
||||
/* Terminate list */
|
||||
};
|
||||
|
||||
const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
|
||||
@@ -233,7 +234,7 @@ const SPI_Config SPI_config[] = {
|
||||
.object = &spiCC26XXDMAObjects[0],
|
||||
.hwAttrs = &spiCC26XXDMAHWAttrs[0]
|
||||
},
|
||||
{NULL, NULL, NULL}
|
||||
{ NULL, NULL, NULL}
|
||||
};
|
||||
/*
|
||||
* ========================== SPI DMA end =====================================
|
||||
|
||||
@@ -103,8 +103,8 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
/* Power Board */
|
||||
#define Board_3V3_EN IOID_14 /* P1.15 */
|
||||
/* PWM outputs */
|
||||
#define Board_PWMPIN0 Board_DK_LED3
|
||||
#define Board_PWMPIN1 Board_DK_LED4
|
||||
#define Board_PWMPIN0 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN1 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN2 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN3 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN4 PIN_UNASSIGNED
|
||||
@@ -112,6 +112,12 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
#define Board_PWMPIN6 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN7 PIN_UNASSIGNED
|
||||
|
||||
#define S2P_RST IOID_9
|
||||
#define P2S_RST IOID_13
|
||||
#define SPI_MOSI Board_SPI0_MOSI
|
||||
#define SPI_MISO Board_SPI0_MISO
|
||||
#define SPI_CLK Board_SPI0_CLK
|
||||
|
||||
/** ============================================================================
|
||||
* Instance identifiers
|
||||
* ==========================================================================*/
|
||||
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
@@ -84,6 +84,9 @@ const PIN_Config BoardGpioInitTable[] = {
|
||||
Board_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
|
||||
Board_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master in - slave out */
|
||||
Board_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI clock */
|
||||
Board_SPI1_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
|
||||
Board_SPI1_MISO | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master in - slave out */
|
||||
Board_SPI1_CLK | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI clock */
|
||||
|
||||
PIN_TERMINATE
|
||||
};
|
||||
|
||||
@@ -67,6 +67,9 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
* <board signal alias> <pin mapping>
|
||||
*/
|
||||
|
||||
#define P2S_RST IOID_6
|
||||
#define S2P_RST IOID_7
|
||||
|
||||
/* Discrete outputs */
|
||||
#define Board_RLED IOID_6
|
||||
#define Board_GLED IOID_7
|
||||
@@ -74,7 +77,7 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
#define Board_LED_OFF 0
|
||||
|
||||
/* Discrete inputs */
|
||||
#define Board_BTN1 IOID_13
|
||||
#define Board_BTN1 PIN_UNASSIGNED
|
||||
#define Board_BTN2 IOID_14
|
||||
|
||||
/* UART Board */
|
||||
@@ -87,11 +90,11 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
#define Board_SPI0_MISO IOID_8 /* RF1.20 */
|
||||
#define Board_SPI0_MOSI IOID_9 /* RF1.18 */
|
||||
#define Board_SPI0_CLK IOID_10 /* RF1.16 */
|
||||
#define Board_SPI0_CSN PIN_UNASSIGNED
|
||||
#define Board_SPI0_CSN IOID_23
|
||||
#define Board_SPI1_MISO PIN_UNASSIGNED
|
||||
#define Board_SPI1_MOSI PIN_UNASSIGNED
|
||||
#define Board_SPI1_CLK PIN_UNASSIGNED
|
||||
#define Board_SPI1_CSN PIN_UNASSIGNED
|
||||
#define Board_SPI1_MOSI IOID_13
|
||||
#define Board_SPI1_CLK IOID_12
|
||||
#define Board_SPI1_CSN IOID_22 // IOID_22
|
||||
|
||||
/* I2C */
|
||||
#define Board_I2C0_SCL0 IOID_4
|
||||
@@ -130,10 +133,10 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
#define Board_LCD_CS_OFF 0
|
||||
|
||||
/* PWM outputs */
|
||||
#define Board_PWMPIN0 Board_RLED
|
||||
#define Board_PWMPIN1 Board_GLED
|
||||
#define Board_PWMPIN2 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN3 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN0 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN1 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN2 IOID_15
|
||||
#define Board_PWMPIN3 Board_GLED
|
||||
#define Board_PWMPIN4 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN5 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN6 PIN_UNASSIGNED
|
||||
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
@@ -0,0 +1,157 @@
|
||||
/******************************************************************************
|
||||
|
||||
@file cc26xx_app.cmd
|
||||
|
||||
@brief CC2650F128 linker configuration file for TI-RTOS with Code Composer
|
||||
Studio.
|
||||
|
||||
Group: WCS, BTS
|
||||
Target Device: CC2650, CC2640, CC1350
|
||||
|
||||
******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2016, Texas Instruments Incorporated
|
||||
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 Texas Instruments Incorporated nor the names of
|
||||
its contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
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.
|
||||
|
||||
******************************************************************************
|
||||
Release Name: ble_sdk_2_02_01_18
|
||||
Release Date: 2016-10-26 15:20:04
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
/* Retain interrupt vector table variable */
|
||||
--retain=g_pfnVectors
|
||||
/* Override default entry point. */
|
||||
--entry_point ResetISR
|
||||
/* Suppress warnings and errors: */
|
||||
/* - 10063: Warning about entry point not being _c_int00 */
|
||||
/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */
|
||||
/* files compiled using Keil (ARM compiler) */
|
||||
--diag_suppress=10063,16011,16012
|
||||
|
||||
/* The following command line options are set as part of the CCS project. */
|
||||
/* If you are building using the command line, or for some reason want to */
|
||||
/* define them here, you can uncomment and modify these lines as needed. */
|
||||
/* If you are using CCS for building, it is probably better to make any such */
|
||||
/* modifications in your CCS project and leave this file alone. */
|
||||
/* */
|
||||
/* --heap_size=0 */
|
||||
/* --stack_size=256 */
|
||||
/* --library=rtsv7M3_T_le_eabi.lib */
|
||||
|
||||
/* The starting address of the application. Normally the interrupt vectors */
|
||||
/* must be located at the beginning of the application. Flash is 128KB, with */
|
||||
/* sector length of 4KB */
|
||||
#define FLASH_APP_BASE 0x00000000
|
||||
#define FLASH_LEN 0x20000
|
||||
#define FLASH_PAGE_LEN 0x1000
|
||||
|
||||
/* Last page of Flash is allocated to App: 0x1F000 - 0x1FFFF */
|
||||
#define FLASH_LAST_PAGE_START FLASH_LEN - FLASH_PAGE_LEN
|
||||
|
||||
/* RAM starts at 0x20000000 and is 20KB */
|
||||
#define RAM_APP_BASE 0x20000000
|
||||
#define RAM_LEN 0x5000
|
||||
/* RAM reserved by ROM code starts. */
|
||||
#define RAM_RESERVED_OFFSET 0x4F00
|
||||
|
||||
/* RAM starts at 0x20000000 and is 2KB */
|
||||
#define AUX_RAM_BASE 0x400E0000
|
||||
#define AUX_RAM_LEN 0x800
|
||||
|
||||
/* System memory map */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
/* EDITOR'S NOTE:
|
||||
* the FLASH and SRAM lengths can be changed by defining
|
||||
* ICALL_STACK0_START or ICALL_RAM0_START in
|
||||
* Properties->ARM Linker->Advanced Options->Command File Preprocessing.
|
||||
*/
|
||||
|
||||
/* Application stored in and executes from internal flash */
|
||||
/* Flash Size 128 KB */
|
||||
#ifdef ICALL_STACK0_START
|
||||
FLASH (RX) : origin = FLASH_APP_BASE, length = ICALL_STACK0_START - FLASH_APP_BASE
|
||||
#else // default
|
||||
FLASH (RX) : origin = FLASH_APP_BASE, length = FLASH_LEN - FLASH_PAGE_LEN
|
||||
#endif
|
||||
|
||||
// CCFG Page, contains .ccfg code section and some application code.
|
||||
FLASH_LAST_PAGE (RX) : origin = FLASH_LAST_PAGE_START, length = FLASH_PAGE_LEN
|
||||
|
||||
/* Application uses internal RAM for data */
|
||||
/* RAM Size 16 KB */
|
||||
#ifdef ICALL_RAM0_START
|
||||
SRAM (RWX) : origin = RAM_APP_BASE, length = ICALL_RAM0_START - RAM_APP_BASE
|
||||
#else //default
|
||||
SRAM (RWX) : origin = RAM_APP_BASE, length = RAM_RESERVED_OFFSET
|
||||
#endif
|
||||
|
||||
AUXRAM (RWX) : origin = AUX_RAM_BASE, length = AUX_RAM_LEN
|
||||
}
|
||||
|
||||
/* Section allocation in memory */
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.intvecs : > FLASH_APP_BASE
|
||||
.text : >> FLASH | FLASH_LAST_PAGE
|
||||
.const : >> FLASH | FLASH_LAST_PAGE
|
||||
.constdata : >> FLASH | FLASH_LAST_PAGE
|
||||
.rodata : >> FLASH | FLASH_LAST_PAGE
|
||||
.cinit : > FLASH | FLASH_LAST_PAGE
|
||||
.pinit : >> FLASH | FLASH_LAST_PAGE
|
||||
.init_array : >> FLASH | FLASH_LAST_PAGE
|
||||
.emb_text : >> FLASH | FLASH_LAST_PAGE
|
||||
.ccfg : > FLASH_LAST_PAGE (HIGH)
|
||||
|
||||
GROUP > SRAM
|
||||
{
|
||||
.data
|
||||
.bss
|
||||
.vtable
|
||||
.vtable_ram
|
||||
vtable_ram
|
||||
.sysmem
|
||||
.nonretenvar
|
||||
} LOAD_END(heapStart)
|
||||
|
||||
.stack : > SRAM (HIGH) LOAD_START(heapEnd)
|
||||
|
||||
.aux_ram : > AUXRAM
|
||||
}
|
||||
|
||||
/* Create global constant that points to top of stack */
|
||||
/* CCS: Change stack size under Project Properties */
|
||||
__STACK_TOP = __stack + __STACK_SIZE;
|
||||
|
||||
/* Allow main() to take args */
|
||||
--args 0x8
|
||||
@@ -0,0 +1,148 @@
|
||||
|
||||
/*
|
||||
* Filename: cc26xx_app_gpram.cmd
|
||||
*
|
||||
* Description: CCS linker file to define GPRAM region
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
*
|
||||
* 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 Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Retain interrupt vector table variable */
|
||||
--retain=g_pfnVectors
|
||||
/* Override default entry point. */
|
||||
--entry_point ResetISR
|
||||
/* Suppress warnings and errors: */
|
||||
/* - 10063: Warning about entry point not being _c_int00 */
|
||||
/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */
|
||||
/* files compiled using Keil (ARM compiler) */
|
||||
--diag_suppress=10063,16011,16012
|
||||
|
||||
/* The following command line options are set as part of the CCS project. */
|
||||
/* If you are building using the command line, or for some reason want to */
|
||||
/* define them here, you can uncomment and modify these lines as needed. */
|
||||
/* If you are using CCS for building, it is probably better to make any such */
|
||||
/* modifications in your CCS project and leave this file alone. */
|
||||
/* */
|
||||
/* --heap_size=0 */
|
||||
/* --stack_size=256 */
|
||||
/* --library=rtsv7M3_T_le_eabi.lib */
|
||||
|
||||
/* The starting address of the application. Normally the interrupt vectors */
|
||||
/* must be located at the beginning of the application. Flash is 128KB, with */
|
||||
/* sector length of 4KB */
|
||||
#define FLASH_APP_BASE 0x00000000
|
||||
#define FLASH_LEN 0x20000
|
||||
#define FLASH_PAGE_LEN 0x1000
|
||||
|
||||
/* Last page of Flash is allocated to App: 0x1F000 - 0x1FFFF */
|
||||
#define FLASH_LAST_PAGE_START FLASH_LEN - FLASH_PAGE_LEN
|
||||
|
||||
/* RAM starts at 0x20000000 and is 20KB */
|
||||
#define RAM_APP_BASE 0x20000000
|
||||
#define RAM_LEN 0x5000
|
||||
/* RAM reserved by ROM code starts. */
|
||||
#define RAM_RESERVED_OFFSET 0x4F00
|
||||
|
||||
/* GPRAM starts at 0x11000000 and is 8KB */
|
||||
#define GPRAM_BASE 0x11000000
|
||||
#define GPRAM_SIZE 0x2000
|
||||
|
||||
/* System memory map */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
/* EDITOR'S NOTE:
|
||||
* the FLASH and SRAM lengths can be changed by defining
|
||||
* ICALL_STACK0_START or ICALL_RAM0_START in
|
||||
* Properties->ARM Linker->Advanced Options->Command File Preprocessing.
|
||||
*/
|
||||
|
||||
/* Application stored in and executes from internal flash */
|
||||
/* Flash Size 128 KB */
|
||||
#ifdef ICALL_STACK0_START
|
||||
FLASH (RX) : origin = FLASH_APP_BASE, length = ICALL_STACK0_START - FLASH_APP_BASE
|
||||
#else // default
|
||||
FLASH (RX) : origin = FLASH_APP_BASE, length = FLASH_LEN - FLASH_PAGE_LEN
|
||||
#endif
|
||||
|
||||
// CCFG Page, contains .ccfg code section and some application code.
|
||||
FLASH_LAST_PAGE (RX) : origin = FLASH_LAST_PAGE_START, length = FLASH_PAGE_LEN
|
||||
|
||||
/* Application uses internal RAM for data */
|
||||
/* RAM Size 16 KB */
|
||||
#ifdef ICALL_RAM0_START
|
||||
SRAM (RWX) : origin = RAM_APP_BASE, length = ICALL_RAM0_START - RAM_APP_BASE
|
||||
#else //default
|
||||
SRAM (RWX) : origin = RAM_APP_BASE, length = RAM_RESERVED_OFFSET
|
||||
#endif
|
||||
|
||||
GPRAM (RWX) : origin = GPRAM_BASE, length = GPRAM_SIZE
|
||||
}
|
||||
|
||||
/* Section allocation in memory */
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.intvecs : > FLASH_APP_BASE
|
||||
.text : >> FLASH | FLASH_LAST_PAGE
|
||||
.const : >> FLASH | FLASH_LAST_PAGE
|
||||
.constdata : >> FLASH | FLASH_LAST_PAGE
|
||||
.rodata : >> FLASH | FLASH_LAST_PAGE
|
||||
.cinit : > FLASH | FLASH_LAST_PAGE
|
||||
.pinit : >> FLASH | FLASH_LAST_PAGE
|
||||
.init_array : >> FLASH | FLASH_LAST_PAGE
|
||||
.emb_text : >> FLASH | FLASH_LAST_PAGE
|
||||
.ccfg : > FLASH_LAST_PAGE (HIGH)
|
||||
.bss : > GPRAM
|
||||
|
||||
|
||||
GROUP > SRAM
|
||||
{
|
||||
.data
|
||||
.vtable
|
||||
.vtable_ram
|
||||
vtable_ram
|
||||
.sysmem
|
||||
.nonretenvar
|
||||
} LOAD_END(heapStart)
|
||||
|
||||
.stack : > SRAM (HIGH) LOAD_START(heapEnd)
|
||||
}
|
||||
|
||||
/* Create global constant that points to top of stack */
|
||||
/* CCS: Change stack size under Project Properties */
|
||||
__STACK_TOP = __stack + __STACK_SIZE;
|
||||
|
||||
/* Allow main() to take args */
|
||||
--args 0x8
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
@@ -0,0 +1,170 @@
|
||||
|
||||
/*
|
||||
* Filename: cc26xx_app_gpram.icf
|
||||
*
|
||||
* Description: IAR linker file to define GPRAM region
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
*
|
||||
* 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 Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Memory Sizes
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
define symbol RAM_SIZE = 0x00005000; // 20K
|
||||
define symbol FLASH_SIZE = 0x00020000; // 128K
|
||||
define symbol ROM_SIZE = 0x0001C000; // 115K
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Memory Definitions
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RAM
|
||||
//
|
||||
define symbol RAM_START = 0x20000000;
|
||||
define symbol RAM_RESERVED_START = 0x20004F00;
|
||||
|
||||
if ( isdefinedsymbol(ICALL_RAM0_START) )
|
||||
{
|
||||
define symbol RAM_END = (ICALL_RAM0_START-1);
|
||||
}
|
||||
else // default
|
||||
{
|
||||
define symbol RAM_END = RAM_RESERVED_START - 1;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Flash
|
||||
//
|
||||
define symbol FLASH_START = 0x00000000;
|
||||
|
||||
if ( isdefinedsymbol(ICALL_STACK0_START) )
|
||||
{
|
||||
define symbol FLASH_END = (ICALL_STACK0_START-1);
|
||||
}
|
||||
else // default
|
||||
{
|
||||
// Default includes all but last page, which is defined later.
|
||||
define symbol FLASH_END = FLASH_START + FLASH_SIZE - 0x1001;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Stack
|
||||
//
|
||||
|
||||
define symbol STACK_SIZE = 0x400;
|
||||
define symbol STACK_START = RAM_END + 1;
|
||||
define symbol STACK_END = STACK_START - STACK_SIZE;
|
||||
//
|
||||
define symbol STACK_TOP = RAM_END + 1;
|
||||
export symbol STACK_TOP;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RAM
|
||||
//
|
||||
|
||||
define symbol GPRAM_START = 0x11000000;
|
||||
define symbol GPRAM_SIZE = 8096;
|
||||
define symbol GPRAM_END = GPRAM_START + GPRAM_SIZE;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Flash Interrupt Vector Table
|
||||
//
|
||||
|
||||
define symbol INTVEC_NUM_ENTRIES = 50 + 1; // first entry is stack location
|
||||
define symbol INTVEC_SIZE = INTVEC_NUM_ENTRIES + 4;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Memory Regions
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
define memory mem with size = 4G;
|
||||
|
||||
define region RAM = mem:[from RAM_START to RAM_END];
|
||||
define region FLASH_LAST_PAGE = mem:[from(FLASH_SIZE) - 0x1000 to FLASH_SIZE-1];
|
||||
define region FLASH = mem:[from FLASH_START to FLASH_END] |
|
||||
FLASH_LAST_PAGE;
|
||||
define region GPRAM = mem:[from GPRAM_START to GPRAM_END];
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Memory Placement
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Code and RO Data
|
||||
place in FLASH { readonly };
|
||||
|
||||
// CCFG
|
||||
place at end of FLASH_LAST_PAGE { readonly section .ccfg };
|
||||
keep { section .ccfg };
|
||||
|
||||
// Interrupt Vector Table
|
||||
place at address mem:FLASH_START { readonly section .intvec };
|
||||
keep { readonly section .intvec };
|
||||
|
||||
// RAM Vector Table
|
||||
place at start of RAM { section .vtable_ram };
|
||||
|
||||
// Runtime Stack
|
||||
define block CSTACK with alignment = 8, size = STACK_SIZE { section .stack };
|
||||
place at end of RAM { block CSTACK };
|
||||
|
||||
// RW Data
|
||||
define block RWDATA { rw };
|
||||
place in RAM { block RWDATA };
|
||||
|
||||
// GPRAM
|
||||
define block GPDATA { section .bss };
|
||||
place in GPRAM { block GPDATA };
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Initialization
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
initialize by copy { readwrite };
|
||||
|
||||
do not initialize
|
||||
{
|
||||
section .noinit,
|
||||
section .stack,
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// The USE_TIRTOS_ROM symbol is defined internally in the build flow (using
|
||||
// --config_def USE_TIRTOS_ROM=1) for TI-RTOS applications whose appBLE.cfg file
|
||||
// specifies to use the ROM.
|
||||
//
|
||||
if (isdefinedsymbol(USE_TIRTOS_ROM)) {
|
||||
include "TIRTOS_ROM.icf";
|
||||
}
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
+480
@@ -0,0 +1,480 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Texas Instruments Incorporated
|
||||
* 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 Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Includes
|
||||
* ------------------------------------------------------------------------------
|
||||
*/
|
||||
// TI RTOS drivers
|
||||
#include <ti/sysbios/BIOS.h>
|
||||
#include <ti/sysbios/knl/Task.h>
|
||||
#include <ti/sysbios/knl/Semaphore.h>
|
||||
#include <ti/drivers/PIN.h>
|
||||
#include <ti/drivers/SPI.h>
|
||||
|
||||
#include <xdc/runtime/Log.h>
|
||||
#include <xdc/runtime/System.h>
|
||||
|
||||
#include <ti/mw/grlib/grlib.h>
|
||||
#include <ti/mw/display/Display.h>
|
||||
#include <ti/mw/display/DisplaySharp.h>
|
||||
#include <ti/mw/lcd/SharpGrLib.h>
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Constants and macros
|
||||
* ------------------------------------------------------------------------------
|
||||
*/
|
||||
// Timeout of semaphore that controls exclusive to the LCD (infinite)
|
||||
#define ACCESS_TIMEOUT BIOS_WAIT_FOREVER
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Type definitions
|
||||
* ------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Local variables
|
||||
* ------------------------------------------------------------------------------
|
||||
*/
|
||||
/* Display function table for sharp implementation */
|
||||
const Display_FxnTable DisplaySharp_fxnTable = {
|
||||
DisplaySharp_open,
|
||||
DisplaySharp_clear,
|
||||
DisplaySharp_clearLines,
|
||||
DisplaySharp_put5,
|
||||
DisplaySharp_close,
|
||||
DisplaySharp_control,
|
||||
DisplaySharp_getType,
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Functions
|
||||
* ------------------------------------------------------------------------------
|
||||
*/
|
||||
/*!
|
||||
* @fn DisplaySharp_open
|
||||
*
|
||||
* @brief Initialize the LCD
|
||||
*
|
||||
* @descr Initializes the pins used by the LCD, creates resource access
|
||||
* protection semaphore, turns on the LCD device, initializes the
|
||||
* frame buffer, initializes to white background/dark foreground,
|
||||
* and finally clears the object->displayColor.
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param params - display parameters
|
||||
*
|
||||
* @return Pointer to Display_Config struct
|
||||
*/
|
||||
Display_Handle DisplaySharp_open(Display_Handle hDisplay,
|
||||
Display_Params *params)
|
||||
{
|
||||
DisplaySharp_HWAttrs *hwAttrs = (DisplaySharp_HWAttrs *)hDisplay->hwAttrs;
|
||||
DisplaySharp_Object *object = (DisplaySharp_Object *)hDisplay->object;
|
||||
|
||||
PIN_Config pinTable[4 + 1];
|
||||
|
||||
object->lineClearMode = params->lineClearMode;
|
||||
|
||||
uint32_t i = 0;
|
||||
if (hwAttrs->csPin != PIN_TERMINATE)
|
||||
{
|
||||
pinTable[i++] = hwAttrs->csPin | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX;
|
||||
}
|
||||
if (hwAttrs->extcominPin != PIN_TERMINATE)
|
||||
{
|
||||
pinTable[i++] = hwAttrs->extcominPin | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX;
|
||||
}
|
||||
if (hwAttrs->powerPin != PIN_TERMINATE)
|
||||
{
|
||||
pinTable[i++] = hwAttrs->powerPin | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MAX;
|
||||
}
|
||||
if (hwAttrs->enablePin != PIN_TERMINATE)
|
||||
{
|
||||
pinTable[i++] = hwAttrs->enablePin | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MAX;
|
||||
}
|
||||
pinTable[i++] = PIN_TERMINATE;
|
||||
|
||||
object->hPins = PIN_open(&object->pinState, pinTable);
|
||||
if (object->hPins == NULL)
|
||||
{
|
||||
Log_error0("Couldn't open pins for Sharp96x96");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SPI_Params spiParams;
|
||||
SPI_Params_init(&spiParams);
|
||||
spiParams.bitRate = 4000000;
|
||||
|
||||
object->hSpi = SPI_open(hwAttrs->spiIndex, &spiParams);
|
||||
|
||||
if (object->hSpi == NULL)
|
||||
{
|
||||
Log_error0("Couldn't open SPI driver for Sharp96x96");
|
||||
PIN_close(object->hPins);
|
||||
object->hPins = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Init colors
|
||||
object->displayColor.bg = ClrBlack;
|
||||
object->displayColor.fg = ClrWhite;
|
||||
|
||||
// Exclusive access
|
||||
Semaphore_Params semParams;
|
||||
|
||||
Semaphore_Params_init(&semParams);
|
||||
semParams.mode = Semaphore_Mode_BINARY;
|
||||
Semaphore_construct(&object->semLCD, 1, &semParams);
|
||||
|
||||
// Grab LCD
|
||||
Semaphore_pend((Semaphore_Handle) & object->semLCD, ACCESS_TIMEOUT);
|
||||
|
||||
// Initialize the GrLib back-end transport
|
||||
SharpGrLib_init(object->hSpi, object->hPins, hwAttrs->csPin);
|
||||
|
||||
object->g_sDisplay.lSize = sizeof(tDisplay);
|
||||
object->g_sDisplay.pFxns = &g_sharpFxns;
|
||||
object->g_sDisplay.pvDisplayData = object->displayBuffer;
|
||||
object->g_sDisplay.usHeight = hwAttrs->pixelHeight;
|
||||
object->g_sDisplay.usWidth = hwAttrs->pixelWidth;
|
||||
object->g_sDisplay.pvDisplayData = hwAttrs->displayBuf;
|
||||
|
||||
// Graphics library init
|
||||
GrContextInit(&object->g_sContext, &object->g_sDisplay, &g_sharpFxns);
|
||||
|
||||
// Graphics properties
|
||||
GrContextForegroundSet(&object->g_sContext, object->displayColor.fg);
|
||||
GrContextBackgroundSet(&object->g_sContext, object->displayColor.bg);
|
||||
GrContextFontSet(&object->g_sContext, &g_sFontFixed6x8);
|
||||
|
||||
// Clear display
|
||||
GrClearDisplay(&object->g_sContext);
|
||||
GrFlush(&object->g_sContext);
|
||||
|
||||
// Release LCD
|
||||
Semaphore_post((Semaphore_Handle) & object->semLCD);
|
||||
|
||||
return hDisplay;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @fn DisplaySharp_clear
|
||||
*
|
||||
* @brief Clears the display
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplaySharp_clear(Display_Handle hDisplay)
|
||||
{
|
||||
DisplaySharp_Object *object = (DisplaySharp_Object *)hDisplay->object;
|
||||
|
||||
if (object->hPins == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Grab LCD
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->semLCD, ACCESS_TIMEOUT))
|
||||
{
|
||||
GrClearDisplay(&object->g_sContext);
|
||||
GrFlush(&object->g_sContext);
|
||||
|
||||
// Release LCD
|
||||
Semaphore_post((Semaphore_Handle) & object->semLCD);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @fn DisplaySharp_clearLines
|
||||
*
|
||||
* @brief Clears lines lineFrom-lineTo of the display, inclusive
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param lineFrom - line index (0 .. )
|
||||
* @param lineTo - line index (0 .. )
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplaySharp_clearLines(Display_Handle hDisplay,
|
||||
uint8_t lineFrom, uint8_t lineTo)
|
||||
{
|
||||
DisplaySharp_Object *object = (DisplaySharp_Object *)hDisplay->object;
|
||||
|
||||
if (lineTo <= lineFrom)
|
||||
{
|
||||
lineTo = lineFrom;
|
||||
}
|
||||
|
||||
tRectangle rect = {
|
||||
.sXMin = 0,
|
||||
.sXMax = object->g_sContext.sClipRegion.sXMax,
|
||||
.sYMin = lineFrom * object->g_sContext.pFont->ucHeight,
|
||||
.sYMax = (lineTo + 1) * object->g_sContext.pFont->ucHeight - 1,
|
||||
};
|
||||
|
||||
GrContextForegroundSet(&object->g_sContext, object->displayColor.bg);
|
||||
GrRectFill(&object->g_sContext, &rect);
|
||||
GrContextForegroundSet(&object->g_sContext, object->displayColor.fg);
|
||||
GrFlush(&object->g_sContext);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @fn DisplaySharp_put5
|
||||
*
|
||||
* @brief Write a text string to a specific line/column of the display
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param line - line index (0..)
|
||||
* @param column - column index (0..)
|
||||
* @param fmt - format string
|
||||
* @param aN - optional format arguments
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplaySharp_put5(Display_Handle hDisplay, uint8_t line,
|
||||
uint8_t column, uintptr_t fmt, uintptr_t a0,
|
||||
uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4)
|
||||
{
|
||||
DisplaySharp_Object *object = (DisplaySharp_Object *)hDisplay->object;
|
||||
|
||||
uint8_t xp, yp, clearStartX, clearEndX;
|
||||
|
||||
char dispStr[23];
|
||||
|
||||
if (object->hPins == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Grab LCD
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->semLCD, ACCESS_TIMEOUT))
|
||||
{
|
||||
xp = column * object->g_sContext.pFont->ucMaxWidth + 1;
|
||||
yp = line * object->g_sContext.pFont->ucHeight + 0;
|
||||
clearStartX = clearEndX = xp;
|
||||
|
||||
switch (object->lineClearMode)
|
||||
{
|
||||
case DISPLAY_CLEAR_LEFT:
|
||||
clearStartX = 0;
|
||||
break;
|
||||
case DISPLAY_CLEAR_RIGHT:
|
||||
clearEndX = object->g_sContext.sClipRegion.sXMax;
|
||||
break;
|
||||
case DISPLAY_CLEAR_BOTH:
|
||||
clearStartX = 0;
|
||||
clearEndX = object->g_sContext.sClipRegion.sXMax;
|
||||
break;
|
||||
case DISPLAY_CLEAR_NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (clearStartX != clearEndX)
|
||||
{
|
||||
tRectangle rect = {
|
||||
.sXMin = clearStartX,
|
||||
.sXMax = clearEndX,
|
||||
.sYMin = yp,
|
||||
.sYMax = yp + object->g_sContext.pFont->ucHeight - 1,
|
||||
};
|
||||
|
||||
GrContextForegroundSet(&object->g_sContext, object->displayColor.bg);
|
||||
GrRectFill(&object->g_sContext, &rect);
|
||||
GrContextForegroundSet(&object->g_sContext, object->displayColor.fg);
|
||||
}
|
||||
|
||||
System_snprintf(dispStr, sizeof(dispStr), (xdc_CString)fmt, a0, a1, a2, a3, a4);
|
||||
|
||||
// Draw a text on the display
|
||||
GrStringDraw(&object->g_sContext,
|
||||
dispStr,
|
||||
AUTO_STRING_LENGTH,
|
||||
xp,
|
||||
yp,
|
||||
OPAQUE_TEXT);
|
||||
|
||||
GrFlush(&object->g_sContext);
|
||||
|
||||
// Release LCD
|
||||
Semaphore_post((Semaphore_Handle) & object->semLCD);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @fn DisplaySharp_close
|
||||
*
|
||||
* @brief Turns of the display and releases the LCD control pins
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplaySharp_close(Display_Handle hDisplay)
|
||||
{
|
||||
DisplaySharp_HWAttrs *hwAttrs = (DisplaySharp_HWAttrs *)hDisplay->hwAttrs;
|
||||
DisplaySharp_Object *object = (DisplaySharp_Object *)hDisplay->object;
|
||||
|
||||
if (object->hPins == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Grab LCD
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->semLCD, ACCESS_TIMEOUT))
|
||||
{
|
||||
// Turn off the display
|
||||
PIN_setOutputValue(object->hPins, hwAttrs->enablePin, 0);
|
||||
|
||||
// Release resources
|
||||
PIN_close(object->hPins);
|
||||
object->hPins = NULL;
|
||||
|
||||
SPI_close(object->hSpi);
|
||||
object->hSpi = NULL;
|
||||
|
||||
// Deconfigure GrLib back-end
|
||||
SharpGrLib_init(NULL, NULL, PIN_UNASSIGNED);
|
||||
|
||||
// Release LCD
|
||||
Semaphore_post((Semaphore_Handle) & object->semLCD);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* @fn DisplaySharp_control
|
||||
*
|
||||
* @brief Function for setting control parameters of the Display driver
|
||||
* after it has been opened.
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param cmd - command to execute, supported commands are:
|
||||
* | Command | Description |
|
||||
* |------------------------------- |-------------------------|
|
||||
* | ::DISPLAY_CMD_TRANSPORT_CLOSE | Close SPI but leave control pins |
|
||||
* | ::DISPLAY_CMD_TRANSPORT_OPEN | Re-open SPI driver |
|
||||
* @param arg - argument to the command
|
||||
*
|
||||
* @return ::DISPLAY_STATUS_SUCCESS if success, or error code if error.
|
||||
*/
|
||||
int DisplaySharp_control(Display_Handle hDisplay, unsigned int cmd, void *arg)
|
||||
{
|
||||
DisplaySharp_HWAttrs *hwAttrs = (DisplaySharp_HWAttrs *)hDisplay->hwAttrs;
|
||||
DisplaySharp_Object *object = (DisplaySharp_Object *)hDisplay->object;
|
||||
|
||||
/* Initialize return value */
|
||||
int ret = DISPLAY_STATUS_ERROR;
|
||||
|
||||
/* Perform command */
|
||||
switch(cmd)
|
||||
{
|
||||
case DISPLAY_CMD_TRANSPORT_CLOSE:
|
||||
// Grab LCD
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->semLCD, ACCESS_TIMEOUT))
|
||||
{
|
||||
if (object->hSpi)
|
||||
{
|
||||
// Close SPI and tell back-end there is no SPI
|
||||
SPI_close(object->hSpi);
|
||||
SharpGrLib_init(NULL, object->hPins, hwAttrs->csPin);
|
||||
object->hSpi = NULL;
|
||||
ret = DISPLAY_STATUS_SUCCESS;
|
||||
}
|
||||
// Release LCD
|
||||
Semaphore_post((Semaphore_Handle) & object->semLCD);
|
||||
}
|
||||
break;
|
||||
|
||||
case DISPLAY_CMD_TRANSPORT_OPEN:
|
||||
// Grab LCD
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->semLCD, ACCESS_TIMEOUT))
|
||||
{
|
||||
if (NULL == object->hSpi)
|
||||
{
|
||||
// Re-open SPI and re-init back-end
|
||||
SPI_Params spiParams;
|
||||
SPI_Params_init(&spiParams);
|
||||
spiParams.bitRate = 4000000;
|
||||
object->hSpi = SPI_open(hwAttrs->spiIndex, &spiParams);
|
||||
SharpGrLib_init(object->hSpi, object->hPins, hwAttrs->csPin);
|
||||
ret = DISPLAY_STATUS_SUCCESS;
|
||||
}
|
||||
// Release LCD
|
||||
Semaphore_post((Semaphore_Handle) & object->semLCD);
|
||||
}
|
||||
break;
|
||||
|
||||
case DISPLAYSHARP_CMD_SET_COLORS:
|
||||
// Grab LCD
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->semLCD, ACCESS_TIMEOUT))
|
||||
{
|
||||
object->displayColor = *(DisplaySharpColor_t *)arg;
|
||||
|
||||
GrContextForegroundSet(&object->g_sContext, object->displayColor.fg);
|
||||
GrContextBackgroundSet(&object->g_sContext, object->displayColor.bg);
|
||||
|
||||
// Release LCD
|
||||
Semaphore_post((Semaphore_Handle) & object->semLCD);
|
||||
|
||||
// Return success
|
||||
ret = DISPLAY_STATUS_SUCCESS;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* The command is not defined */
|
||||
ret = SPI_STATUS_UNDEFINEDCMD;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @fn DisplaySharp_getType
|
||||
*
|
||||
* @brief Returns type of transport
|
||||
*
|
||||
* @return Display type define LCD
|
||||
*/
|
||||
unsigned int DisplaySharp_getType(void)
|
||||
{
|
||||
return Display_Type_LCD | Display_Type_GRLIB;
|
||||
}
|
||||
@@ -0,0 +1,331 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Texas Instruments Incorporated
|
||||
* 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 Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Includes
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
#include <ti/sysbios/BIOS.h>
|
||||
#include <ti/sysbios/knl/Task.h>
|
||||
#include <ti/sysbios/knl/Semaphore.h>
|
||||
#include <ti/drivers/UART.h>
|
||||
|
||||
#include <xdc/runtime/Log.h>
|
||||
#include <xdc/runtime/Diags.h>
|
||||
#include <xdc/runtime/System.h>
|
||||
|
||||
#include <ti/mw/display/Display.h>
|
||||
#include <ti/mw/display/DisplayUart.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Constants and macros
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef MIN
|
||||
# define MIN(n, m) (((n) > (m)) ? (m) : (n))
|
||||
#endif
|
||||
|
||||
#define DISPLAY_UART_ESC_INITIAL "\x1b\x63" /* Reset terminal */ \
|
||||
"\x1b[2J" /* Clear screen */ \
|
||||
"\x1b[10r" /* Scrolling region from line 10 */ \
|
||||
"\x1b[11;1H" /* Set initial cursor to line 11 */
|
||||
|
||||
#define DISPLAY_UART_ESC_MOVEPOS_FMT "\x1b\x37" /* Save cursor position */ \
|
||||
"\x1b[10r" /* Retransmit scroll */ \
|
||||
"\x1b[%d;%dH" /* Move cursor fmt str */
|
||||
|
||||
#define DISPLAY_UART_ESC_RESTOREPOS "\x1b\x38" /* Restore saved cursor pos */
|
||||
|
||||
#define DISPLAY_UART_ESC_CLEAR_SCREEN "\x1b[2J" /* Clear screen */
|
||||
#define DISPLAY_UART_ESC_CLEAR_CUR_LEFT "\x1b[1K" /* Clear cursor left */
|
||||
#define DISPLAY_UART_ESC_CLEAR_CUR_RIGHT "\x1b[0K" /* Clear cursor right */
|
||||
#define DISPLAY_UART_ESC_CLEAR_BOTH "\x1b[2K" /* Clear line */
|
||||
#define DISPLAY_UART_ESC_CLEARSEQ_LEN 4
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Type definitions
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Local variables
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
/* Display function table for UART implementation */
|
||||
const Display_FxnTable DisplayUart_fxnTable = {
|
||||
DisplayUart_open,
|
||||
DisplayUart_clear,
|
||||
DisplayUart_clearLines,
|
||||
DisplayUart_put5,
|
||||
DisplayUart_close,
|
||||
DisplayUart_control,
|
||||
DisplayUart_getType,
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Functions
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
/*!
|
||||
* @fn DisplayUart_open
|
||||
*
|
||||
* @brief Initialize the UART transport
|
||||
*
|
||||
* @descr Opens the UART index specified in the HWAttrs, and creates a
|
||||
* mutex semaphore
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param params - display parameters
|
||||
*
|
||||
* @return Pointer to Display_Config struct
|
||||
*/
|
||||
Display_Handle DisplayUart_open(Display_Handle hDisplay,
|
||||
Display_Params *params)
|
||||
{
|
||||
DisplayUart_HWAttrs *hwAttrs = (DisplayUart_HWAttrs *)hDisplay->hwAttrs;
|
||||
DisplayUart_Object *object = (DisplayUart_Object *)hDisplay->object;
|
||||
|
||||
UART_Params uartParams;
|
||||
UART_Params_init(&uartParams);
|
||||
uartParams.baudRate = hwAttrs->baudRate;
|
||||
uartParams.writeMode = UART_MODE_BLOCKING;
|
||||
|
||||
Semaphore_Params semParams;
|
||||
Semaphore_Params_init(&semParams);
|
||||
semParams.mode = Semaphore_Mode_BINARY;
|
||||
Semaphore_construct(&object->mutex, 1, &semParams);
|
||||
|
||||
switch (params->lineClearMode)
|
||||
{
|
||||
case DISPLAY_CLEAR_BOTH: object->lineClearSeq = DISPLAY_UART_ESC_CLEAR_BOTH; break;
|
||||
case DISPLAY_CLEAR_LEFT: object->lineClearSeq = DISPLAY_UART_ESC_CLEAR_CUR_LEFT; break;
|
||||
case DISPLAY_CLEAR_RIGHT: object->lineClearSeq = DISPLAY_UART_ESC_CLEAR_CUR_RIGHT; break;
|
||||
default: /* fall-through */
|
||||
case DISPLAY_CLEAR_NONE: object->lineClearSeq = NULL; break;
|
||||
}
|
||||
|
||||
object->hUart = UART_open(hwAttrs->uartIdx, &uartParams);
|
||||
if (NULL == object->hUart)
|
||||
{
|
||||
Log_print0(Diags_USER1, "DisplayUart.c: Couldn't open UART");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Send VT100 initial config to terminal */
|
||||
UART_write(object->hUart, DISPLAY_UART_ESC_INITIAL, sizeof DISPLAY_UART_ESC_INITIAL - 1);
|
||||
|
||||
return hDisplay;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @fn DisplayUart_clear
|
||||
*
|
||||
* @brief Does nothing, as output is stateless.
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplayUart_clear(Display_Handle hDisplay)
|
||||
{
|
||||
DisplayUart_Object *object = (DisplayUart_Object *)hDisplay->object;
|
||||
DisplayUart_HWAttrs *hwAttrs = (DisplayUart_HWAttrs *)hDisplay->hwAttrs;
|
||||
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->mutex, hwAttrs->mutexTimeout))
|
||||
{
|
||||
UART_write(object->hUart, DISPLAY_UART_ESC_CLEAR_SCREEN, 4);
|
||||
Semaphore_post((Semaphore_Handle) & object->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @fn DisplayUart_clearLines
|
||||
*
|
||||
* @brief Does nothing, as output is stateless.
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param lineFrom - line index (0 .. )
|
||||
* @param lineTo - line index (0 .. )
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplayUart_clearLines(Display_Handle hDisplay,
|
||||
uint8_t lineFrom, uint8_t lineTo)
|
||||
{
|
||||
DisplayUart_Object *object = (DisplayUart_Object *)hDisplay->object;
|
||||
DisplayUart_HWAttrs *hwAttrs = (DisplayUart_HWAttrs *)hDisplay->hwAttrs;
|
||||
|
||||
uint32_t strSize = 0;
|
||||
uint32_t curLine = 0;
|
||||
const uint8_t uartClearLineMoveDown[] = "\x1b[2K\x1b\x45";
|
||||
|
||||
if (lineTo <= lineFrom)
|
||||
{
|
||||
lineTo = lineFrom;
|
||||
}
|
||||
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->mutex, hwAttrs->mutexTimeout))
|
||||
{
|
||||
strSize += System_snprintf(hwAttrs->strBuf, hwAttrs->strBufLen,
|
||||
DISPLAY_UART_ESC_MOVEPOS_FMT, lineFrom + 1, 0);
|
||||
|
||||
for (curLine = lineFrom + 1;
|
||||
curLine < lineTo + 2 &&
|
||||
hwAttrs->strBufLen - strSize > sizeof DISPLAY_UART_ESC_RESTOREPOS - 1;
|
||||
curLine++)
|
||||
{
|
||||
memcpy(hwAttrs->strBuf + strSize, uartClearLineMoveDown, sizeof uartClearLineMoveDown - 1);
|
||||
strSize += sizeof uartClearLineMoveDown - 1;
|
||||
}
|
||||
|
||||
memcpy(hwAttrs->strBuf + strSize, DISPLAY_UART_ESC_RESTOREPOS, sizeof DISPLAY_UART_ESC_RESTOREPOS - 1);
|
||||
strSize += sizeof DISPLAY_UART_ESC_RESTOREPOS - 1;
|
||||
|
||||
UART_write(object->hUart, hwAttrs->strBuf, strSize);
|
||||
Semaphore_post((Semaphore_Handle) & object->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @fn DisplayUart_put5
|
||||
*
|
||||
* @brief Write a text string to UART with return and newline.
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param line - line index (0..)
|
||||
* @param column - column index (0..)
|
||||
* @param fmt - format string
|
||||
* @param aN - optional format arguments
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplayUart_put5(Display_Handle hDisplay, uint8_t line,
|
||||
uint8_t column, uintptr_t fmt, uintptr_t a0,
|
||||
uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4)
|
||||
{
|
||||
DisplayUart_Object *object = (DisplayUart_Object *)hDisplay->object;
|
||||
DisplayUart_HWAttrs *hwAttrs = (DisplayUart_HWAttrs *)hDisplay->hwAttrs;
|
||||
|
||||
uint32_t strSize = 0;
|
||||
|
||||
char *strBuf = hwAttrs->strBuf;
|
||||
const uint16_t bufLen = hwAttrs->strBufLen;
|
||||
|
||||
if (Semaphore_pend((Semaphore_Handle) & object->mutex, hwAttrs->mutexTimeout))
|
||||
{
|
||||
if (line != DisplayUart_SCROLLING)
|
||||
{
|
||||
/* Add cursor movement escape sequence */
|
||||
strSize += System_snprintf(strBuf + strSize, bufLen - strSize - 2,
|
||||
DISPLAY_UART_ESC_MOVEPOS_FMT, line + 1, column + 1);
|
||||
|
||||
/* Add line clearing escape sequence */
|
||||
if (object->lineClearSeq)
|
||||
{
|
||||
memcpy(strBuf + strSize, object->lineClearSeq, DISPLAY_UART_ESC_CLEARSEQ_LEN);
|
||||
strSize += DISPLAY_UART_ESC_CLEARSEQ_LEN;
|
||||
}
|
||||
}
|
||||
|
||||
strSize += System_snprintf(strBuf + strSize, bufLen - strSize - 2, (xdc_CString)fmt, a0, a1, a2, a3, a4);
|
||||
|
||||
if (line != DisplayUart_SCROLLING)
|
||||
{
|
||||
memcpy(strBuf + strSize, DISPLAY_UART_ESC_RESTOREPOS, sizeof DISPLAY_UART_ESC_RESTOREPOS - 1);
|
||||
strSize += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
strBuf[strSize++] = '\r';
|
||||
strBuf[strSize++] = '\n';
|
||||
}
|
||||
|
||||
UART_write(object->hUart, strBuf, strSize);
|
||||
Semaphore_post((Semaphore_Handle) & object->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @fn DisplayUart_close
|
||||
*
|
||||
* @brief Closes the UART handle
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void DisplayUart_close(Display_Handle hDisplay)
|
||||
{
|
||||
DisplayUart_Object *object = (DisplayUart_Object *)hDisplay->object;
|
||||
|
||||
// Not sure what happens if someone is writing
|
||||
UART_close(object->hUart);
|
||||
object->hUart = NULL;
|
||||
|
||||
// Not sure what happens if someone is pending
|
||||
Semaphore_destruct(&object->mutex);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @fn DisplayUart_control
|
||||
*
|
||||
* @brief Function for setting control parameters of the Display driver
|
||||
* after it has been opened.
|
||||
*
|
||||
* @param hDisplay - pointer to Display_Config struct
|
||||
* @param cmd - command to execute
|
||||
* @param arg - argument to the command
|
||||
*
|
||||
* @return ::DISPLAY_STATUS_UNDEFINEDCMD because no commands are supported
|
||||
*/
|
||||
int DisplayUart_control(Display_Handle hDisplay, unsigned int cmd, void *arg)
|
||||
{
|
||||
return DISPLAY_STATUS_UNDEFINEDCMD;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @fn DisplayUart_getType
|
||||
*
|
||||
* @brief Returns type of transport
|
||||
*
|
||||
* @return Display type UART
|
||||
*/
|
||||
unsigned int DisplayUart_getType(void)
|
||||
{
|
||||
return Display_Type_UART;
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Texas Instruments Incorporated
|
||||
* 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 Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _DISPLAY_UART_H_
|
||||
#define _DISPLAY_UART_H_
|
||||
|
||||
#include <ti/sysbios/knl/Semaphore.h>
|
||||
#include <ti/drivers/UART.h>
|
||||
#include <ti/mw/display/Display.h>
|
||||
#include <stdint.h>
|
||||
|
||||
extern const Display_FxnTable DisplayUart_fxnTable;
|
||||
|
||||
/*
|
||||
* @brief Line number for text to appear in scrolling region
|
||||
*/
|
||||
#define DisplayUart_SCROLLING 0xFF
|
||||
|
||||
|
||||
typedef struct DisplayUart_HWAttrs
|
||||
{
|
||||
unsigned int uartIdx;
|
||||
unsigned int baudRate;
|
||||
unsigned int mutexTimeout;
|
||||
char *strBuf;
|
||||
uint16_t strBufLen;
|
||||
} DisplayUart_HWAttrs;
|
||||
|
||||
|
||||
typedef struct DisplayUart_Object
|
||||
{
|
||||
UART_Handle hUart;
|
||||
Semaphore_Struct mutex;
|
||||
uint8_t *lineClearSeq;
|
||||
} DisplayUart_Object, *DisplayUart_Handle;
|
||||
|
||||
|
||||
Display_Handle DisplayUart_open(Display_Handle,
|
||||
Display_Params * params);
|
||||
void DisplayUart_clear(Display_Handle handle);
|
||||
void DisplayUart_clearLines(Display_Handle handle,
|
||||
uint8_t fromLine,
|
||||
uint8_t toLine);
|
||||
void DisplayUart_put5(Display_Handle handle, uint8_t line,
|
||||
uint8_t column, uintptr_t fmt, uintptr_t a0,
|
||||
uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4);
|
||||
void DisplayUart_close(Display_Handle);
|
||||
int DisplayUart_control(Display_Handle handle, unsigned int cmd, void *arg);
|
||||
unsigned int DisplayUart_getType(void);
|
||||
|
||||
#endif // _DISPLAY_UART_H_
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user