XMOS Clock出力
XMOS Clock Out configuration, XMOS クロック出力
今回は、クロック出力に挑戦してみます。
XMOS startKITには、J7というPCIeコネクタのポートをピンヘッダをつけることによって取り出せるようになります。
上記レイアウトのCにピンヘッダを装着して、そこから信号を取り出してみます。
クロック出力(内部生成):
内部クロックを出力する場合のコード。J7の1番ピン(上記レイアウトでは、Cの一番左側のピン)に2MHzのクロックを出力してみます。
#include <xs1.h>
port J7_1 = XS1_PORT_1F;
clock clk = XS1_CLKBLK_1;
int main(void)
{
configure_clock_rate(clk, 100, 50);
configure_port_clock_output(J7_1, clk);
start_clock(clk);
return 0;
}
clock clk = XS1_CLKBLK_1;
ここは、clkをクロックブロック1に割り当てています。XMOSはクロックブロック1-5まで使用できます。
configure_clock_rate(clk, 100, 50);
clkを分周します。100/50で2MHzになります。100/8で12.5MHz。
configure_port_clock_output(J7_1, clk);
clkの出力をJ7_1へルーティングします。これより、2MHzがJ7_1から出力されます。
start_clock(clk);
これで、実際にクロックの出力が開始されます。
2クロック出力(内部生成):
このことより、下記のように追加すると、2つのクロックを出力することができます。
#include <xs1.h>
port J7_1 = XS1_PORT_1F;
port J7_2 = XS1_PORT_1G;
clock clk1 = XS1_CLKBLK_1;
clock clk2 = XS1_CLKBLK_2;
int main(void)
{
configure_clock_rate(clk1, 100, 50);
configure_port_clock_output(J7_1, clk1);
configure_clock_rate(clk2, 100, 8);
configure_port_clock_output(J7_2, clk2);
start_clock(clk1);
start_clock(clk2);
return 0;
}
これで、J7_1から2MHz、J7_2から12.5MHzのクロックが出力されます。
クロック出力(外部入力):
外部クロックを出力する場合のコード。J7の1番ピンにJ7の2番ピンに入力した外部クロックを出力します。
#include <xs1.h>
port J7_1 = XS1_PORT_1F;
port J7_2 = XS1_PORT_1G;
clock clk = XS1_CLKBLK_1;
int main(void)
{
configure_clock_src(clk, J7_2);
configure_port_clock_output(J7_1, clk);
start_clock(clk);
return 0;
}