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;

}