赞
踩
注意:我们的曲线画的是y。
- #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
-
- }
- }
-
- 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++;
-
- }
-
-
-
运行仿真之后, 选择Tools->Graph->Singel Time
对属性进行以下配置
按照以上代码及配置之后的运行结果如下视频所示
DSP实时曲线显示
CCS支持的刷新速度实在是太慢了,20Hz凑合用吧。
感谢您的阅读,欢迎留言讨论、收藏、点赞、分享
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。