主题中讨论的其他器件: MSP430G2553、 MSP430F5529
工具/软件:Code Composer Studio
您好!
我想使用 RF430FRL152H 和 TRF7970ABP+MSP430G2553 测量 模拟信号。 我想实现以下函数:
(__LW_AT__1)RF430FRL152H 中的 ADC 以20Hz~25Hz 的采样频率对模拟信号进行采样;
(__LW_AT__2)TRF7970ABP+MSP430G2553通过射频场获取信号、并通过串行端口将信号发送到 PC 、以进行实时和连续采集。
那么、有一个我在 RF430FRL152H 中编程的代码
-------------------------------------- 代码空间-------------------------------------------------------
#include
#include
#include "types.h"
//********* 函数原型******** /
void DeviceInit(void);
void initISO15693 (U16_t parameters );
void SetupSD14 (unsigned char channel);
//******** /u16_t
SamplesBuffer[4];
//u08_t State;
//enum state_type
//{
// idle_State= 1、
// One_shot_TEMP_reference_sample_State = 2、
// One_Shot TEMP_Thermister_SAMPLE_SAMPLE_STATE = 3、
//};
枚举 Channel_Types
{
ADC0_CHANNEL = 0x0、
INTERNAL_TEMP_CHANNEL = 0x1、
热敏电阻_ADC2_CHANNEL = 0x2、
参考_ADC1_CHANNEL = 0x3
、};
//********* 定义********* /
#define CLEAR_BLOCK_LOCK_LOCsBIT3
#define FRAM_LOCK_BLOCK_SAGE_SIZE38
#define FRAM_LOCK_BLOCK0xF840 // ISO15693锁定块的地址
#define ROM_EUSCI_SUPPING_ENABLED 位2
#define EROM_EUSCI_SUPPING_DISABLED 0
#define ROM_SENSOR_SUPPING_ENABLED BIT7
#define ROM_SENSOR_SUPPING_DISABLED 0
#defineNFC_BIDGE_DISABLED6
#defineNFC_BIDGE_ENABLED0
#define8_BYTE_BLOCKBIT0
#define4_BYTE_BLOCK0
#defineFIRST_ISO_PAGEBIT1
#definesecond_iso_page0
/*固件系统控制字节
*
位0:ISOBlockSize0 - 4字节、1 - 8字节
* 位1:PAGE0 - PAGE 1、1 - PAGE 0 (仅对4字节块模式有效)
* 位2:ROMEUSCISupportEnabled0 -禁用、1 -启用(在 RF430FRL153H 上强制为0)
* 位3-5:被保留 ISO
* 位6:NFCBridgeDisable0 -启用、1 -禁用(请参阅下面的注释)
* 位7:ROMSensorSupportEnable0 -禁用、1 -启用(在 RF430FRL154H 上强制为0)
*
建议在此项目中禁用 NFC 桥接器。 可能会发生意外行为
、* 使用它、因为这里设置了配置。
*
* 如果需要 eUSCI 主机控制器部分以及射频功能、则为默认项目
* 必须使用。 这就是 NFC 在该应用中不受支持(因为 I2C/SPI 主机控制
器* 控制寄存器位于 NFC 文件所需的同一位置)。 但是 FRAM 的其余部分
* 存储器可用于存储和读取、使用 ISO15693。
*/
#define firmware_control_address0xF867
#pragma RETAIN (Firmware_System_Control_Byte);
#pragma LOCATION = firmware_control_address
const u08_t Firmware_System_Control_Byte = ROM_SENSOR_SUPPING_DISABLED + EROM_EUSCI_SUPPING_DISABLE_DISABLE_LOCTE+ NFC_BUTE_LOCK_LOCK_MODED + FETY_RETOOT_BLE_ROM_TOBLE_ROM_REGATE + FIRST_RESULL_ROM_
//声明不受编译器使用
的保护/******** /
#pragma RETAIN (DS)
#pragma LOCATION = 0x1C00
u08_t DS;
#pragma RETAIN (RF)
#pragma LOCATION = 0x1C6A
const u08_t RF;
#pragma RETAIN (NRX)
#pragma LOCATION = 0x1CA4 //
const u08_t NRX[34];#pragma
RETAx (N08
)#pragma RETAx (NRETAx)#pragma RETAIN = 0x1C12_t RETAx
(N08)#pragma RETAIN = 0x1C12_t RETAx (nT)
#pragma RETAIN (PF)
#pragma LOCATION = 0x1C0A
const U16_t PF[48];
/********* /
#define NDEF_START_ADDRESS0xF868
#pragma RETAIN (NFC_NDEF_Message);
#pragma LOCATION = NDEF_START_ADDRESS;//地址
const u08_t NFC_NDEF_Message[21]的位置={
//目前大多数 Android 应用程序不会将此消息识别为 NDEF,因为
Android /堆栈没有注册。 但是、支持 ISO15693 RFID 通信。
//块0
0xE1,// NDEF 魔法号
0x40,//版本号,读取/写入访问条件
0xF2,//F3*4/8 = 0x79 // 0x7E,// 1008字节/8 = 126块
0x00,//扩展内存//0x00,//不支持读取多个块(仅限于3个块)
//块
0x03// NDEF 消息存在
0x0B、//长度、11字节
0xD1、//记录标头
0x01、//类型长度
//块2
0x07、//有效载荷长度
0x55、//记录类型 U (URI)
0x01、// URI 标头标识
符0x74、//'t'
//块3
0x69、//'I'
0x2E、//'。
0x63、//'c'
0x6f、//'o'
//块4
0x6D、//'m'
0xFE、// TLV 终端
器0x00、//空无关
0x00、//空无关
};
/******* 总结
*此项目仅使用 RF430FRL15xH ROM 上的射频堆栈(ISO15693)。 此设置允许用户创建
从 FRAM 运行的*自定义应用程序。 只有运行 RF 堆栈
的 RF13M 矢量需要指向其* ROM 位置。
*
////////////////////////////
*主要内容
*
简介:
*
*帕拉姆[IN]:无
*
*帕拉姆[OUT]:无
*
返回:
*
/
void main()
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
// ROM RF13M 模块设置**正确的 RF 堆栈操作需要以下三行
DS = 1;//需要在此处初始化 ROM 变量
ASM ("调用#0x5CDA ");//调用 ROM 函数(初始化函数指针)
asm ("调用#0x5CAC ");//调用 ROM 函数(检查器件配置)
initISO15693 (clear_block_locks);
DeviceInit();
while (1)
{
//State = One_shot_TEMP_reference_sample_State;
SetupSD14 (ADC0_channel);
}
//_bis_SR_register (LPM3_bits + GIE);//在这里对两个通道进行采样、SD14_ADC 将唤醒两次并将转换存储
到 samplesBuffer 中,最后一次转换将导致退出 LPM 模式并继续执行以下操作。
//可以对此处存储的转换执行处理
// SamplesBuffer[0]= ADC0转换结果
__bis_SR_register (LPM3_bits + GIE);
__no_operation();
}//
SetupSD14*
*要采样的通道(热敏电阻或基准电阻)*
*函数:此函数设置为对热敏电阻或基准电阻进行采样*/
void SetupSD14 (unsigned char channel)
{
//设置:要采样的通道、需要可编程放大器增益(2x)、CIC 滤波器、SD14INTDLY0、因为 CIC 滤波器需要至少两个连续的样本才能生成准确的结果
// SDRATE 以最快的结果但也不是最准确的、 SD14RBEN 也被启用、它是流入热敏电阻和基准电阻的电流源
SD14CTL1 = SD14GAIN_0 + SD14FILT_CIC + SD14RATE__CIC32 + SD14INTDLY_0 +通道;
//来自 ACLK 的时钟(来自 VLO 时钟的64kHz)、SD14DIV1设置为32倍分频(SD14需要2kHz 的时钟)、
SD14CTL0 = SD14IE + SD14DIV1; // 2kHz 采样率、ACLK 源、SVSS 接地(.125V)、中断使能
SD14CTL0 |= SD14EN; //启用 SD14模块,
SD14CTL0 |= SD14SC; //开始转换
}
//设置并读取 ADC0
#pragma vector=SD_ADC_vector
中断 void SD14_ADC (void)
{
switch (_evo_in_range (SD14IV、4))//SD14IV 寄存器状态:00h-无中断挂起;02h-SD14OVEM 溢出(SD14OVIFG);SD14OVIN_EXECTION
(SD14V
)/ SD14V 暂挂/ SD14V ~暂挂/ SD14V 暂挂/ SD14V 暂挂/ SD14V 暂挂
案例 SD14IV_RES:
SD14CTL0 &=~SD14IFG;//清除可用的数据中断
示例 Buffer[0]= SD14MEM0;
SD14CTL0 |= SD14EN + SD14SC;
/* if (State = One_SHOT_TEMP_reference_sample_State)
{
State = One_SHOT_TEMP_Thermistor_sample_State;
SamplesBuffer[0]= SD14MEM0; //热敏电阻电流偏置误差
设置 SD14 (thermister_ADC2_channel)的补偿; //设置 ADC 并开始转换
}
否则(状态= One_SHOT_TEMP_Thermistor_sample_State)
{
SamplesBuffer[1]= SD14MEM0; //热敏电阻电流偏置误差 SD14CTL0
&=~SD14EN 的补偿;//如果使用定时器
状态= IDLE_STATE 的连续读数,则禁用 SD14直到它重新启动;
//转换完成,数据可用
__BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);//EXIT LPM 模式在此中断后
}*/
中断
*DeviceInit
*
*简介:初始化时钟系统和其他设置
* patchable function
*
* param[in]:parameters:具有这些独立选项
* Initialize_device_clock_system -初始化时钟系统
* populate_interrupt_vector_in_initialization -填充默认中断矢量并重新计算其 CRC
*
param[out]:无
*
返回无
*
*可修补:是
/
void DeviceInit (void)
{
P1SEL0 = 0xF0;//保留 JTAG
P1SEL1 = 0xF0;//保留 JTAG
P1DIR &=~0xEF;
P1REN = 0;
CCSCTL0 = CCSKEY; //解锁 CCS
CCSCTL1 = 0; //时钟速度不要减半
CCSCTL4 = SELA_1 + SELM_0 + SELS_0; //为 ACLK 选择 VLO 并为 MCLK 和 SMCLK 选择 HFCLK/DCO
CCSCTL5 = DIVA_2 + DIVM_1 + DIVS_1; //将 ACLK (4)、MCLK 和 SMCLK 的分频器设置为1
CCSCTL6 = XTOFF; //如果不使用晶振、则将其旋转
CCSCTL8 = ACLKREQEN + MCLKREQEN + SMCLKREQEN;//如果未使用时钟、则禁用时钟
CCSCTL0_H |= 0xFF; //锁定 CCS
返回;
}
/*********
*initISO15693
*
*简介:初始化射频堆栈
*
* param[in]:参数-设置 ISO15693 (清除锁定块的选项)的配置
*
param[out]:none
*
return 「无」
/
void initISO15693 (u16_t parameters)
{
//启用中断**请勿更改以下两行,
这两行是 RF13MCTL 中正确的射频堆栈操作所需的|| RF13MTXEN + RF13MRXEN + RF13MRFTOEN;//在 RF13M 模块
RF13MNT 上设置 Rx 和 TX 功能|= RF13MRXIE + RF13RXTRF13MTOEN;//如果
(参数& clear_block_lock)
为{,则在 RX 和超时以及过流和欠流检查上启用中断
//initializeBlockLockLockLocks();//inline 函数
memset (((u08_t *) FRAM_LOCK_BLOCK、0xFF、FRAM_LOCK_BLOCK_SAGE_SIZE); //块用零位锁定、 清除 FRAM 和 RAM 锁定块
}
//#pragma
vector = RFPMM_vector
//_INTERRUPT void RFPMM_ISR (void)
////
//////////#pragma vector = Port1_vector
//_interrupt port1_ISR (void)
//{
////////// pragma
ISR vector =
//#pragma COUT_0/ void /RF0_MODE/#BR_COUT_ADC/0/ void
//注释此行以使用 ROM 的 RF13M ISR,取消注释下一行,请参阅.cmd 文件以了解详细信息
#pragma CODE_SECTION (RF13M_ISR,".rf13m_ROM_ISR")//注释此行以创建将存在于 FRAM 中的自定义 RF13M ISR,绕过 ROM, 取消注释之前
的#pragma vector = RF13M_vector
__interrupt void RF13M_ISR (void)
{
//现在该矢量指向运行射频堆栈的 ROMS 固件位置。
//在此处输入代码将不更改 CODE_SECTION 行
//上面,而会导致错误。
//更改上面的代码部分将导致 ROM RF 堆栈被绕过。 需要创建新的处理程序
。}
//#pragma vector = WDT_Vector
//_INTERRUPT void WDT_ISR (void)
//////
//
////////#pragma vector = TIMER0_A1_vector
//_INTERRUPT void TimerA1_ISR (void)
////////////////
////#Sysma vector = TIMER0_A1_vector //(
void
)///中断/nvoid /中断/中断 向量/nvoid /中断向量///
------------------------------ 代码空间-------------------------------------------------------
我有这些问题
(__LW_AT__1)我的代码是正确的、为什么我无法实现连续和不间断的数据收集?
(__LW_AT__2)我的 ADC 是否设置正确? 我可以使用一些串行助理来获取数据吗?


