2016年1月24日日曜日

PSoC 5LP サイン波形生成時間(メモ)

PSoC 5LP上でサイン波を生成するのにかかる時間を測定してみた。

Github
https://github.com/ryood/TDA1543/tree/master/PSoC/I2S_Test/PrototypingKit_Realtime_Table_Gen_0.cydsn

ソースコード
 #include <project.h>  
 #include <math.h>  
 #define TABLE_LENGTH  512  
 volatile uint8 waveTable_0[TABLE_LENGTH];  
 void genSineTable(volatile uint8 *table, int length)  
 {  
   int i;  
   int16 v;  
   int8* p8;  
   for (i = 0; i < length / 2; i++) {  
     v = (int16)(sin(2.0f * M_PI * i * 2 / length) * 32767);  
     p8 = (int8 *)&v;  
     table[i*2]  = *(p8+1);  
     table[i*2+1] = *p8;  
   }  
 }  
 int main()  
 {  
   CyGlobalIntEnable; /* Enable global interrupts. */  
   for(;;)  
   {  
     Pin_Check_0_Write(1u);  
     genSineTable(waveTable_0, TABLE_LENGTH);  
     Pin_Check_0_Write(0u);  
     CyDelay(1);  
   }  
 }  

単純にサイン波を生成してPinの出力をH/Lして計測した。浮動小数点演算をするのでBuild SettingのLinkerで「-lm」を指定しないとリンクに失敗する。

PSoC 5LP Prototyping Kit
MASTER_CLK:72MHz
Release Mode


TABLE_LENGTH 実行時間(ms)
512 15.28
1024 29.64
2048 58.4
4096 116
8192 230