Thread 中讨论的其他器件: CCStudio
工具与软件:
大家好、团队成员:
我对 msp430fr2676微控制器还比较陌生。 我试图在 CC Studio 上查看微控制器的寄存器、却找不到 CAPTIOxCTL 寄存器(CapTouch Registers)进行调试。 能否请大家对此进行评论一下、我已经附上了可以在调试时看到的寄存器的屏幕截图。
我期待收到您的回复。
非常感谢
Criton
. 
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.
工具与软件:
大家好、团队成员:
我对 msp430fr2676微控制器还比较陌生。 我试图在 CC Studio 上查看微控制器的寄存器、却找不到 CAPTIOxCTL 寄存器(CapTouch Registers)进行调试。 能否请大家对此进行评论一下、我已经附上了可以在调试时看到的寄存器的屏幕截图。
我期待收到您的回复。
非常感谢
Criton
. 
尊敬的 Criton:
与所有其他 MSP430外设寄存器不同、CapTIvate 寄存器不会面向终端用户。 这样做的主要原因是外设的复杂性。 公开这些信息将允许篡改寄存器、这可能导致外设无法正常运行、并成为 TI 的支持问题。 因此、可以使用带 API 的 CapTIvate 库、让用户无需了解寄存器和位及其功能即可操控外设功能。
也就是说、您查找寄存器的具体原因是什么?
尊敬的 Criton:
如果您尚未发现 CapTIvate 技术指南、我建议您先在软件一章中了解库 API 的工作原理、然后在该章中的"操作方法"部分中了解如何读取传感器的简单示例。
CapTIvate 库作为您从 GUI 生成的每个 CapTIvate 工程的一部分提供。 它包含基本模块(本质上是 HAL 层)(用于操作 CapTIvate 寄存器的硬件抽象)和高级模块(具有传感器特定的处理功能)。
基础和高级处理函数位于项目的"CapTIve"路径中、位于 Base 和 Advanced 文件夹下、并编译到.lib (对于 CCS 项目)和.R43 (对于 IAR 项目)中。 这些模块没有可用的源代码。 除了.lib 模块之外、基本函数和高级函数也作为预编程函数存在于存储器的 MSP430的 ROM 部分中。 在器件的 ROM 部分中查找基本函数和高级函数可释放程序存储器(FRAM)中约12KB 的空间、从而为应用提供更多空间。
还有一个通信模块、该模块具有 MSP430向 GUI 传送传感器数据和控制信息所需的 UART 和 I2C 驱动程序。 这些函数利用 MSP430 driverlib 函数、"driverlib"文件夹下的每个项目中也包含这些函数。 driverlib 源代码可用、但通常您不需要它。 CapTIvate 库使用的 driverlib 函数调用会执行与 GUI 通信所需的所有操作、但您可以将它们重新用于在使用 GUI 完成后您的应用程序。 例如、当使用 CAPT-PGMR 时、可以重复使用 I2C 驱动程序函数与 PCB 上的 I2C 器件通信、或使用 UART 将数据发送到 PC 终端应用程序。
最后是应用层、它是您的代码所在的位置。 通常、您需要将所有传感器处理代码放入所谓的"回调"函数中。 回调函数在测量传感器后自动调用、因此无需担心何时运行传感器处理代码。 您可能需要在此处执行某些操作、例如在按下按钮时打开/关闭 LED。 可通过直接访问端口寄存器或使用其中一个 driverlib 函数来设置/清除 GPIO 引脚来实现此目的。
再次通读"软件"一章、您应该获得最需要的一切。
就是这样。
尊敬的 Dennis:
我是从设计指南开始的。 它生成了一个代码、我随后进行了修改、如下所示。 在调试时、我无法获得 UART 输出终端。 我使用 Tera Term、并使用 MSP 编程器将其连接到终端。 每当我按下传感器但不按下 UART 时、我使 LED 正常工作。 您能告诉我会出什么问题吗? 我已附上下面的代码
非常感谢、此致、
Criton
#include <msp430.h> // Generic MSP430 Device Include
#include "CAPT_CommConfig.h"
#include "UART.h"
#include "UART_Definitions.h"
#include "driverlib.h" // MSPWare Driver Library
#include "captivate.h" // CapTIvate Touch Software Library
#include "CAPT_App.h" // CapTIvate Application Code
#include "CAPT_BSP.h" // CapTIvate EVM Board Support Package
#include "intrinsics.h"
#include "UART_Definitions.h"
#include "stddef.h"
// Assumes SMCLK = 2MHZ
#define BAUD_19200
#ifdef BAUD_9600
// EUSCI runs @ 9600
#define UART_SAMPLING_MODE (EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION)
#define UART_PRESCALER (13)
#define UART_FIRST_STAGE_MOD (0)
#define UART_SECOND_STAGE_MOD (69)
#elif defined BAUD_19200
// EUSCI runs @ 19.2K
#define UART_SAMPLING_MODE (EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION)
#define UART_PRESCALER (6)
#define UART_FIRST_STAGE_MOD (8)
#define UART_SECOND_STAGE_MOD (17)
#elif defined BAUD_38400
// EUSCI runs @ 38.4K
#define UART_SAMPLING_MODE (EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION)
#define UART_PRESCALER (3)
#define UART_FIRST_STAGE_MOD (4)
#define UART_SECOND_STAGE_MOD (4)
#elif defined BAUD_57600
// EUSCI runs @ 57.6K
#define UART_SAMPLING_MODE (EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION)
#define UART_PRESCALER (2)
#define UART_FIRST_STAGE_MOD (2)
#define UART_SECOND_STAGE_MOD (187)
#elif defined BAUD_115200
// EUSCI runs @ 115.2K
#define UART_SAMPLING_MODE (EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION)
#define UART_PRESCALER (17)
#define UART_FIRST_STAGE_MOD (0)
#define UART_SECOND_STAGE_MOD (74)
#elif defined BAUD_230400
// EUSCI runs @ 230.4K
#define UART_SAMPLING_MODE (EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION)
#define UART_PRESCALER (8)
#define UART_FIRST_STAGE_MOD (0)
#define UART_SECOND_STAGE_MOD (214)
#elif defined BAUD_250000
// EUSCI runs @ 250K
#define UART_SAMPLING_MODE (EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION)
#define UART_PRESCALER (8)
#define UART_FIRST_STAGE_MOD (0)
#define UART_SECOND_STAGE_MOD (0)
#else
#warning "NO BAUD RATE SELECTED"
#endif
const tUARTPort g_myUartPort =
{
.pbReceiveCallback = NULL,
.pbErrorCallback = 0,
.peripheralParameters.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
.peripheralParameters.clockPrescalar = UART_PRESCALER,
.peripheralParameters.firstModReg = UART_FIRST_STAGE_MOD,
.peripheralParameters.secondModReg = UART_SECOND_STAGE_MOD,
.peripheralParameters.parity = EUSCI_A_UART_NO_PARITY,
.peripheralParameters.msborLsbFirst = EUSCI_A_UART_LSB_FIRST,
.peripheralParameters.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT,
.peripheralParameters.uartMode = EUSCI_A_UART_MODE,
.peripheralParameters.overSampling = UART_SAMPLING_MODE
};
void main(void)
{
//
// Initialize the MCU
// BSP_configureMCU() sets up the device IO and clocking
// The global interrupt enable is set to allow peripherals
// to wake the MCU.
//
WDTCTL = WDTPW | WDTHOLD;
P6OUT &= ~BIT0; // Clear P1.0 output latch for a defined power-on state
P6DIR |= BIT0; // Set P1.0 to output direction
BSP_configureMCU();
//__bis_SR_register(GIE);
UART_openPort(&g_myUartPort); // Open Uart for communication
UART_transmitBuffer("\n\rHello World!\n\r", sizeof("\n\rHello World!\n\r")); // welcome message
//
// Start the CapTIvate application
//
CAPT_appStart();
//
// Background Loop
//
while(1)
{
//
// Run the captivate application handler.
//
LED1_ON;
if(CAPT_appHandler()==true)
{
P6OUT = BIT0; // led on port 6 turns on
UART_transmitBuffer("\n\rHello World!\n\r", sizeof("\n\rHello World!\n\r")); // interuupt message
}
else
{
P6OUT = ~BIT0; // led on port six turns off
}
//
// This is a great place to add in any
// background application code.
//
__no_operation();
//
// End of background loop iteration
// Go to sleep if there is nothing left to do
//
CAPT_appSleep();
} // End background loop
} // End main()