目录
代码
注意:我们的曲线画的是y。
1、用DSP自带的延时函数的写法
#include <main.h>
float y[100];
float t = 0.0;
void main(void)
{
int i;
while(1){
t = t + 0.05;
if(t > 100) t = 0;
for(i = 1; i < 100; i++){
y[i-1] = y[i];
}
y[99] = 10 * sin(2 * 3.1415926 * 2 * t);
DELAY_US(50000); // 20Hz
}
}
2、定时器的写法 (大项目肯定选择这种写法)
float y[100];
float t = 0.0;
#define SYS_BASIC_FREQUENCY 2000
#define CNT1HZ 2000
#define CNT2HZ 1000
#define CNT20HZ 100
#define CNT40HZ 50
#define CNT50HZ 40
#define CNT100HZ 20
#define CNT200HZ 10
#define CNT250HZ 8
#define CNT500HZ 4
#define CNT1000HZ 2
#define CNT2000HZ 1
int16 iFreqCnt = 0;
int16 iFreq1Hz = 0;
int16 iFreq2Hz = 0;
int16 iFreq20Hz = 0;
int16 iFreq40Hz = 0;
int16 iFreq50Hz = 0;
int16 iFreq100Hz = 0;
int16 iFreq200Hz = 0;
int16 iFreq250Hz = 0;
int16 iFreq500Hz = 0;
int16 iFreq1000Hz = 0;
int16 iFreq2000Hz = 0;
int16 iFreq2500Hz = 0;
int16 iFreq5000Hz = 0;
void main(void){
InitSysCtrl();
DINT;
InitPieCtrl();
InitGpio();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitCpuTimers(); // Initialize CPU Timers
// CPU Timer0
ConfigCpuTimer(&CpuTimer0, 200, 1000000/SYS_BASIC_FREQUENCY);
CpuTimer0Regs.TCR.bit.TIE = 1; // 1: The CPU-Timer interrupt is enabled
// TIMER0 INT1.7 [Page102: Table 3-2.PIE Channel Mapping]
EALLOW;
PieVectTable.TIMER0_INT = &CpuTimer0ISR; // Specify the interrupt service routine
EDIS;
IER |= M_INT1; // Enable CPU Level interrupt
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // Enable PIE Level interrupt
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
EINT; // 使能全局中断
ERTM; // 使能实时仿真中断
CpuTimer0Regs.TCR.bit.TSS = 0; // 使能CPUTimer0
}
interrupt void CpuTimer0ISR(void){
int i;
DivideFreq();
if(iFreq20Hz){
t = t + 0.05;
if(t > 100) t = 0;
for(i = 1; i < 100; i++){
y[i-1] = y[i];
}
y[99] = 10 * sin(2 * 3.1415926 * 0.5 * t);
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
// Generate frequency division signal
void DivideFreq(void){
if(iFreqCnt >= CNT1HZ){
iFreq1Hz = 1;
iFreqCnt = 0;
}else{
iFreq1Hz = 0;
}
if((iFreqCnt%CNT2HZ)==0){
iFreq2Hz = 1;
}else{
iFreq2Hz = 0;
}
if((iFreqCnt%CNT20HZ)==0){
iFreq20Hz = 1;
}else{
iFreq20Hz = 0;
}
if((iFreqCnt%CNT40HZ)==0){
iFreq40Hz = 1;
}else{
iFreq40Hz = 0;
}
if((iFreqCnt%CNT50HZ)==0){
iFreq50Hz = 1;
}else{
iFreq50Hz = 0;
}
if((iFreqCnt%CNT100HZ)==0){
iFreq100Hz = 1;
}else{
iFreq100Hz = 0;
}
if((iFreqCnt%CNT200HZ)==0){
iFreq200Hz = 1;
}else{
iFreq200Hz = 0;
}
if((iFreqCnt%CNT250HZ)==0){
iFreq250Hz = 1;
}else{
iFreq250Hz = 0;
}
if((iFreqCnt%CNT500HZ)==0){
iFreq500Hz = 1;
}else{
iFreq500Hz = 0;
}
if((iFreqCnt%CNT1000HZ)==0){
iFreq1000Hz = 1;
}else{
iFreq1000Hz = 0;
}
if((iFreqCnt%CNT2000HZ)==0){
iFreq2000Hz = 1;
}else{
iFreq2000Hz = 0;
}
/*
if((iFreqCnt%CNT2500HZ)==0){
iFreq2500Hz = 1;
}else{
iFreq2500Hz = 0;
}
if((iFreqCnt%CNT5000HZ)==0){
iFreq5000Hz = 1;
}else{
iFreq5000Hz = 0;
}
*/
iFreqCnt++;
}
CCS配置
运行仿真之后, 选择Tools->Graph->Singel Time
对属性进行以下配置
视频
按照以上代码及配置之后的运行结果如下视频所示
DSP实时曲线显示
CCS支持的刷新速度实在是太慢了,20Hz凑合用吧。
类似内容参考链接:CCS使用教程07:曲线图形显示工具_ccs波形窗口怎么打开-CSDN博客
感谢您的阅读,欢迎留言讨论、收藏、点赞、分享