工具/软件:Code Composer Studio
您能否向我发送与水表 USS 模块相关的示例代码?
此致、
Sumit
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.
工具/软件:Code Composer Studio
您能否向我发送与水表 USS 模块相关的示例代码?
此致、
Sumit
您好、Sumit、
http://www.ti.com/tool/MSP-ULTRASONIC-DESIGN-CENTER
灵
我有一个代码、您能告诉我该程序中的结果变量是什么以及代码的调试方式
#include
#define OSCTYPE_CRYAL OSCTYPE_1
void HSPLL_init (void);
void SAPH_init (void);
void SDHS_init (void);
unsigned int flush_address[10]、flush_data[1024]、i;
#if defined (__TI_Compiler_version__)
#pragma DATA_SECTION (结果、".leaRAM")
#pragma RETAIN (结果)
unsigned int results[1024]={0};
#Elif defined (_IAR_systems_icc_)
#pragma LOCATION = 0x5000
_no_init unsigned int 结果[1024];
#pragma REQUIRED =结果
其他
错误编译器不受支持!
#endif
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
//将 P1.0配置为 LED 的输出
P1OUT &=~BIT0;
P1DIR |= BIT0;
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//根据 MCLK 的器件数据表的要求配置一个 FRAM 等待状态
//在配置时钟系统之前在8MHz 以上运行。
FRCTL0 = FRCTLPW | NWAITS_1;
//时钟系统设置
CSCTL0_H = CSKKEY_H;//解锁 CS 寄存器
//每个器件勘误表在将频率更改为之前将分频器设置为4
//防止因过冲瞬态而超出规格运行
CSCTL3 = DIVA__4 | DIVM_4;//针对勘误表将所有相应的时钟源设置为4分频
CSCTL1 = DCOFSEL_4 | DCORSEL;//将 DCO 设置为16MHz
//延迟~10us 以使 DCO 稳定。 60个周期= 20个周期缓冲器+(10us /(1/4MHz))
//__delay_cycles (60);
CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;//针对16MHz 运行将所有分频器设置为1
CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;// MCLK = SMCLK = 16MHz
CSCTL0_H = 0;//锁定 CS 寄存器
SAPH_INIT();
SDHS_INIT();
HSPLL_init();
//将 TA2.1配置为每秒1次,以触发脉冲生成并切换 LED
TA2CCR0 = 9400;
TA2CCR1 = 4700;
TA2CCTL1 = OUTMOD_7 | CCIE;//启用输出信号以触发 PPG、启用中断
TA2CTL = TASSEL_ACLK | TACLR | MC_UP;//源自 ACLK (VLO)的定时器、清零定时器
while (1)
{
_bis_SR_register (LPM0_bits | GIE);//输入 LPM3 w 中断
__no_operation();//进行调试
}
}
void HSPLL_init (void)
{
//配置 USSXT 振荡器
HSPLLUSSXTLCTL = OSCTYPE_CRYAL | USSXTEN;
//将定时器设置为在 LPM 中等待晶振稳定时间= 4096个时钟用于晶振谐振器。
//对于8MHz XTAL、4096个时钟= 512us。 使用 VLO = 9.4kHz、等待5个计时器时钟周期= 532us。
TA4CCR0 = 5;
TA4CCTL0 = CCIE;//启用中断
TA4CTL = TASSEL_ACLK | TACLR | MC_UP;//源自 ACLK (VLO)的定时器、清零定时器
_bis_SR_register (GIE);//输入 LPM3、带中断
__no_operation();//进行调试
//检查振荡器是否稳定
while ((HSPLLUSSXTLCTL 和 OSCSTATE)==0);
//引脚上的输出振荡器
HSPLLUSSXTLCTL &=~XTOUTOFF;
//初始化 PLL
//使用 PLLM 设置从我们的8MHz 输入获取80MHz 输出
//公式:PLL 输出时钟频率 x 2 =输入时钟频率 x (PLLM+1)
//输入时钟频率= 8MHz
//所需的 PLL 输出时钟频率= 80MHz
// PLLM = 19
HSPLLCTL = PLLM4 | PLLM1 | PLLM0 | PLLINFREQ;//PLLM = 19、PLL 输入频率> 6MHz
//为 UUPS 加电以启动 PLL
UUPSCTL |= USSPWRUP;
//等待 UUPS 上电
while (((UUPSCTL & upstate_3)!= upstate_3);
//等待 PLL 锁定
while (!(HSPLLCTL 和 PLL_LOCK));
}
void SAPH_init (void)
{
//设置 PPG 设置
SAPKEY = KEY;//解锁 SAPH 寄存器
SAPHPGC = PLEV_0 | pPOL_0 | 0x000A;// 10个激励脉冲、0个停止脉冲、非活动时输出低电平、高极性
SAPHPGLPER = 40;//低相位= 4 HSPLL 周期= 50ns
SAPHPGHPER = 40;//高相位= 4 HSPLL 周期= 50ns
SAPHPGCTL = TRSEL_2 | PPGCHSEL_0 | PGSEL_0;// TA2.1触发器、CH0输出、寄存器模式
// SAPHPGCTL = TRSEL_2 | PPGCHSEL_1 | PGSEL_0;// TA2.1触发器、CH1输出、寄存器模式
//将 PHY 设置为在专用 CH0_OUT 引脚上输出 PPG
SAPHOSEL = PCH0SEL__PPGSE;//将 PPG 输出到 ch0
// SAPHOSEL = PCH1SEL__PPGSE;//将 PPG 输出到 CH1
// SAPHICTL0 &=~MUXCTL;// MUXCTL = 0
// SAPHICTL0 &=~MUXSEL_0;//选择 CH0作为输入
SAPHICTL0 &=~MUXCTL;// MUXCTL = 0
SAPHICTL0 |= MUXSEL_1;//选择 CH1作为输入
SAPHBCTL &=~ASQBSC;
SAPHBCTL &= PGABSW;//Rx 偏置开关关闭(启用)。
SAPHBCTL &= CH1EBSW;
SAPHBCTL |= CPDA;
//启用 PPG
SAPHPGCTL |= PPGEN;
}
void SDHS_init (void)
{
//使用寄存器模式设置 SDHS
SDHSCTL0 = TRGSRC_0 | AUTOSSDIS_1 | DALGN_1 | DFMSEL_1;//软件触发、稳定延迟后自动采样启动
SDHSDTCDA = 0x0008;
SDHSCTL1 = OSR_1;// OSR = 10 (80MHz/10 = 8MSPS)。 CS 必须设置 MCLK >= 8MHz。
SDHSCTL2 = 256;// SMPSZ = 256个样本
SDHSCTL6 = 0x1A;// PGA 增益0.1dB
SDHSCTL7 = 0xC;// MODOPTI = 0xC (80MHz PLL 输出频率)
SDHSDTCDA = 0;// DTC 传输数据到 LEA RAM 的开始
SDHSIMSSC = ACQDONE;//启用采集完成中断(在传输256个采样后)
SDHSCTL3 = TRIGEN_1;//启用触发
SDHSCTL4 = SDHSON;//打开 SD 并开始转换
__DELAY_CYCLES (320);// PGA 最坏情况下的延迟40uS 稳定时间
}
//计时器 A2中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = TIMER2_A1_vector
_interrupt void Timer2_A1_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(TIMER2_A1_Vector)) Timer2_A1_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__evo_in_range (TA2IV、TAIV__TAIFG))
{
案例 TAIV__NONE:break;//无中断
案例 TAIV__TACCR1:
SDHSCTL5 &=~SSTRT;
SDHSCTL5 |= SSTRT;//开始转换
中断;
案例 TAIV__TAIFG:中断;//溢出
默认值:break;
}
}
// SDHS 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = SDHS_vector
_interrupt void SDHS_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(SDHS_vector))) SDHS_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__event_in_range (SDHSIIDX、IIDX_6))
{
案例 IIDX_0:中断;//无中断
案例 IIDX_1:中断;// OVF 中断
案例 IIDX_2:// ACQDONE 中断
P1OUT ^= BIT0;//切换 LED 以显示新周期
_delay_cycles (10000);
__no_operation();//在此处放置断点以查看结果
中断;
案例 IIDX_3:中断;// SSTRG 中断
案例 IIDX_4:中断;// DTRDY 中断
案例 IIDX_5:中断;// WINHI 中断
案例 IIDX_6:中断;// WINLO 中断
默认值:break;
}
}
//计时器 A4中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = TIMER4_A0_vector
_interrupt void Timer4_A0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(TIMER4_A0_vector)) Timer4_A0_ISR (void)
其他
错误编译器不受支持!
#endif
{
//停止计时器并从 LPM 唤醒
TA4CTL = MC__STOP;
_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS | GIE);
__no_operation();
}
您好、Sumit、
我们建议客户使用 USS 设计中心来开发应用。
您可以参考 TI EVM 示例项目源代码进行进一步研究。
http://www.ti.com/product/MSP430FR6043/technicaldocuments 上的技术文档
灵
您好、ling、
您能给我解释一下这个代码行吗
#if defined (__TI_Compiler_version__)
#pragma DATA_SECTION (结果、".leaRAM")
#pragma RETAIN (结果)
unsigned int results[1024]={0};
#Elif defined (_IAR_systems_icc_)
#pragma LOCATION = 0x5000
_no_init unsigned int 结果[1024];
#pragma REQUIRED =结果
其他
错误编译器不受支持!
#endif
http://processors.wiki.ti.com/index.php/Placing_Variables_in_Specific_Memory_Location_-_MSP430