Other Parts Discussed in Thread: CC1310
插入调试器,显示有两个串口,这两只跟串口要怎么用起来?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,xds110 class application 用于您这边的串口调试工具。
xds110 class application 用于您这边的串口调试以及debug使用
xds110 class auxiliary Data Port 用于 SWO功能。
software-dl.ti.com/.../quote]请按照链接步骤去参考。
您好,我在cc13xx 26xx的工程目录下,找到了ITM.c以及ITM.h 文件,是在tracer里面找到的,您这边看一下对您有没有帮助,
/******************************************************************************
@file itm.c
@brief Provides ITM module functions
Group: WCS, LPC
Target Device: cc13xx_cc26xx
******************************************************************************
Copyright (c) 2011-2022, Texas Instruments Incorporated
All rights reserved not granted herein.
Limited License.
Texas Instruments Incorporated grants a world-wide, royalty-free,
non-exclusive license under copyrights and patents it now or hereafter
owns or controls to make, have made, use, import, offer to sell and sell
("Utilize") this software subject to the terms herein. With respect to the
foregoing patent license, such license is granted solely to the extent that
any such patent is necessary to Utilize the software alone. The patent
license shall not apply to any combinations which include this software,
other than combinations with devices manufactured by or for TI ("TI
Devices"). No hardware patent is licensed hereunder.
Redistributions must preserve existing copyright notices and reproduce
this license (including the above copyright notice and the disclaimer and
(if applicable) source code license limitations below) in the documentation
and/or other materials provided with the distribution.
Redistribution and use in binary form, without modification, are permitted
provided that the following conditions are met:
* No reverse engineering, decompilation, or disassembly of this software
is permitted with respect to any software provided in binary form.
* Any redistribution and use are licensed by TI for use only with TI Devices.
* Nothing shall obligate TI to provide you with source code for the software
licensed and provided to you in object code.
If software source code is provided to you, modification and redistribution
of the source code are permitted provided that the following conditions are
met:
* Any redistribution and use of the source code, including any resulting
derivative works, are licensed by TI for use only with TI Devices.
* Any redistribution and use of any object code compiled from the source
code and any resulting derivative works, are licensed by TI for use
only with TI Devices.
Neither the name of Texas Instruments Incorporated nor the names of its
suppliers may be used to endorse or promote products derived from this
software without specific prior written permission.
DISCLAIMER.
THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "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 TI AND TI'S LICENSORS 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.
******************************************************************************
*****************************************************************************/
/* Standard Includes */
#include "itm.h"
#include "itm_private.h"
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <ioc.h>
#define ITM_STIM_PORT_8(x) (*(volatile uint8_t *) ITM_STIM_PORT((x)))
#define ITM_STIM_PORT_32(x) (*(volatile uint32_t *) ITM_STIM_PORT((x)))
void ITM_initModule(const ITM_config itm_config)
{
// Disable module
SCS_DEMCR &= (~SCS_DEMCR_TRCEN);
ITM_TCR = 0x00000000;
// Enable trace
SCS_DEMCR |= SCS_DEMCR_TRCEN;
// Unlock and Setup TPIU for SWO UART mode
TPIU_LAR = CS_LAR_UNLOCK;
TPIU_SPPR = TPIU_SPPR_SWO_UART;
TPIU_CSPSR = TPIU_CSPSR_PIN_1;
// Unlock and enable all ITM stimulus ports with default settings
ITM_LAR = CS_LAR_UNLOCK;
ITM_TER = ITM_TER_ENABLE_ALL;
ITM_TPR = ITM_TPR_ENABLE_USER_ALL;
// Setup Baud rate
if (itm_config.systemClock)
{
uint32_t prescalar = itm_config.systemClock / itm_config.baudRate;
// Offset with current prescalar value
uint32_t diff1 = itm_config.systemClock - (prescalar * itm_config.baudRate);
// Offset with prescalar+1 value
uint32_t diff2 = ((prescalar+1) * itm_config.baudRate) - itm_config.systemClock;
if (diff2 < diff1) prescalar++;
// Program prescalar value as (prescalar factor - 1)
TPIU_ACPR = (prescalar - 1);
}
// Disable formatter
TPIU_FFCR = 0;
// Unlock DWT
DWT_LAR = CS_LAR_UNLOCK;
// Configure SWO Traces
IOCPortConfigureSet(IOID_18, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);
}
void ITM_enableModule()
{
// Enable ITM module
ITM_TCR |= ITM_TCR_ENABLE_ITM;
}
void ITM_disableModule()
{
// Disable ITM module
ITM_TCR &= ~ITM_TCR_ENABLE_ITM;
}
void ITM_putStringBlocking(const char* msg, const uint8_t port)
{
// Write one character at a time.
while('\0' != *msg)
{
while(0 == ITM_STIM_PORT_8(port));
ITM_STIM_PORT_8(port) = *msg++;
}
}
void ITM_putValueBlocking(uint32_t value, const uint8_t port)
{
char strValue[8];
int8_t digitIdx;
bool putStarted = false;
for(digitIdx = 7; digitIdx >= 0; digitIdx--)
{
strValue[digitIdx] = (value & (0xF << digitIdx * 4)) >> (digitIdx*4);
if(strValue[digitIdx] < 10)
{
strValue[digitIdx] += '0';
}
else
{
strValue[digitIdx] += 'a'-10;
}
if( (strValue[digitIdx] != '0') || putStarted )
{
while(0 == ITM_STIM_PORT_8(port));
ITM_STIM_PORT_8(port) = strValue[digitIdx];
putStarted = true;
}
}
}
void ITM_putNewLineBlocking(const uint8_t port)
{
while(0 == ITM_STIM_PORT_8(port));
ITM_STIM_PORT_8(port) = '\n';
}
void ITM_putWordBlocking(const uint32_t data, const uint8_t port)
{
// Write the entire32-bit value
while(0 == ITM_STIM_PORT_32(port));
ITM_STIM_PORT_32(port) = data;
}
void ITM_enableExceptionTrace()
{
DWT_CTRL |= DWT_CTRL_ENABLE_EXC_TRC;
ITM_TCR |= ITM_TCR_ENABLE_DWT_TX;
}
void ITM_enablePCSampling()
{
// Clear the PC Sampling and Cycle Event bits
DWT_CTRL &= ~(DWT_CTRL_ENABLE_PC_SAMP | DWT_CTRL_ENABLE_CYC_EVT);
// Setup Sampling interval
DWT_CTRL |= DWT_CTRL_CYC_CNT_1024;
ITM_TCR |= ITM_TCR_ENABLE_DWT_TX;
DWT_CTRL |= DWT_CTRL_ENABLE_CYC_CNT;
// Enable PC sampling event
DWT_CTRL |= DWT_CTRL_ENABLE_PC_SAMP;
}
bool ITM_enableDataTrace(const uint32_t *variable)
{
uint_least8_t numDwtComp = (DWT_CTRL & DWT_CTRL_MASK_NUM_COMP) >> DWT_CTRL_SHIFT_NUM_COMP;
uint_least8_t dwtIndex = 0;
bool dwtAvailable = false;
for (dwtIndex = 0; dwtIndex < numDwtComp ; dwtIndex++)
{
if (0 == DWT_FUNC(dwtIndex))
{
DWT_COMP(dwtIndex) = (uint32_t)variable;
DWT_MASK(dwtIndex) = 0x0;
DWT_FUNC(dwtIndex) = (DWT_FUNC_DATA_SIZE_32 | DWT_FUNC_ENABLE_ADDR_OFFSET | DWT_FUNC_ENABLE_COMP_RW);
dwtAvailable = true;
}
}
return dwtAvailable;
}
void ITM_enableCycleCounter()
{
// Clear the PC Sampling and Cycle Event bits
DWT_CTRL &= ~(DWT_CTRL_ENABLE_PC_SAMP | DWT_CTRL_ENABLE_CYC_EVT);
// Setup Sampling interval
DWT_CTRL |= DWT_CTRL_CYC_CNT_1024;
ITM_TCR |= ITM_TCR_ENABLE_DWT_TX;
DWT_CTRL |= DWT_CTRL_ENABLE_CYC_CNT;
// Enable Cycle Count event
DWT_CTRL |= DWT_CTRL_ENABLE_CYC_EVT;
}
void ITM_enableTiming(ITM_tsPrescale tsPrescale)
{
// Set timestamp prescalar enable timestamp generation
ITM_TCR |= ((tsPrescale << ITM_TCR_TS_PRESCALE_SHIFT) & ITM_TCR_TS_PRESCALE_MASK);
ITM_TCR |= (ITM_TCR_ENABLE_TS);
}
void ITM_enableSyncPackets(ITM_syncPacketRate syncPacketRate)
{
// Clear sync packet rate
DWT_CTRL &= ~(DWT_CTRL_MASK_SYNCTAP);
// Set sync packet rate
DWT_CTRL |= ((syncPacketRate << DWT_CTRL_SHIFT_SYNCTAP) & DWT_CTRL_MASK_SYNCTAP);
// Enable sync packet generation
DWT_CTRL |= DWT_CTRL_ENABLE_CYC_CNT;
ITM_TCR |= (ITM_TCR_ENABLE_SYNC);
}
void ITM_getLibraryVersion(uint32_t *majorVersion, uint32_t *minorVersion)
{
if (majorVersion && minorVersion)
{
*majorVersion = ITM_LIB_MAJOR_VER;
*minorVersion = ITM_LIB_MINOR_VER;
}
}
void ITM_flushModule()
{
// Wait till the ITM Busy status has been cleared
while (ITM_TCR & ITM_TCR_BUSY)
{
asm (" NOP");
}
}
C:\ti\simplelink_cc13x0_sdk_4_20_02_07__win\simplelink_cc13x0_sdk_4_20_02_07\source\ti\ti154stack\tracer
在cc1310的文件目录下,只有dbg.c,并没有swo相关的内容。
另外我给您找到了相关的链接,希望对您有帮助,您仔细查看一下: