
神經(jīng)元芯片的編程是采用Neuron C語(yǔ)言來(lái)完成的。Neuron C是專門為Neuron芯片設(shè)計(jì)的編程語(yǔ)言,它有著豐富的函數(shù)庫(kù),可直接完成許多復(fù)雜的任務(wù)。
基于Neuron芯片的Neurowire I/O模式的A/D接口程序如下:
//////// IO Objection ////////
//定義為Neurowire主模式,A/D芯片的主選信號(hào)由IO0輸出初始化為1
IO-8 neurowire master select (IO-0) ioA2D;;
IO-0 output bit ioA2Dselect =1;
IO-1 input bit start_adc;
# pragma ignore_notused ioA2Dselect
//////// function declare////////
unsigned long adc(unsigned long analog_addr);
////////function definition////////
//A/D轉(zhuǎn)子函數(shù)
unsigned long adc(unsigned long analog-addr)
//形參analog_addr傳遞要選擇的通道,選擇CH0時(shí),analog_addr=0x06,選擇CH1時(shí),analog_addr=0x07
{
unsigned long adc_info;
unsigned long digital_out;
adc_info = (analog_addr << 13);
io_in(ioA2D,&adc_info,16); //選擇通道,同時(shí)接收轉(zhuǎn)換的結(jié)果
digital_out=adc_info & 0x0ff0;
digital_out=digital_out >>4;
return digital_out;
}
由于eurowire I/O對(duì)象是雙向的,即輸入、輸出同時(shí)進(jìn)行。因此,調(diào)用io_in(ioA2D,&adc_info,16)時(shí)啟動(dòng)了16位的雙向數(shù)據(jù)傳輸,該命令可將adc_info中的數(shù)以比特流的形式從IO-9輸送到TLC0832,同可時(shí)通過(guò)IO10從TLC0832的DO腳讀入16位數(shù)并放入adc_info。由TLC0832的工作時(shí)序圖(圖1)可以看出,接收到的16位數(shù)中的第5位到第12位就是轉(zhuǎn)換結(jié)果,所以做了后面的處理。
3.2 基于Neuron芯片的比特I/O模式方案
TMPN3150和TLC0832的第二種接口實(shí)現(xiàn)方法是把TMPN3150的I/O腳定義為比特I/O對(duì)象,它可用以監(jiān)控與Neuron芯片相連的I/O設(shè)備中某個(gè)引腳上的邏輯狀態(tài),其中“0”為低電平,“1”為高電平。
a. 方法2的硬件實(shí)現(xiàn)
方法2的硬件電路如圖3所示。圖中,輸入通道只畫了一路CH0,另一路CH1與CH0相同。當(dāng)輸入為1-5V的電壓信號(hào)時(shí),J斷開;當(dāng)輸入與4-20mA的電流信號(hào)時(shí),J連通。
b. 方法2的軟件實(shí)現(xiàn)
Neuron C語(yǔ)言是從ANSI C中派生出來(lái)的,相對(duì)于ANSI C而言,它進(jìn)一步擴(kuò)展了用以支持由Neuron芯片中的固件提供的各種運(yùn)行特性。
方法2的A/D接口程序如下:
////////IO Objection////////
//將IO腳定義為比特IO對(duì)象,
IO-2 input bit io-do;
IO-0 output bit cs;
IO-3 output bit di;
IO-1 output bit clk;
////////function declare////////
int adc(int adc-addr);
///////function definition//////
//A/D轉(zhuǎn)換子函數(shù)
int adc(int adc_addr)
//形參analog_addr傳遞要選擇的通道,選擇CH0時(shí),adc_addr=0x60;選擇CH1時(shí),adc_addr=0x70//
{
int adc_inbit,digital_out=0;
io_out(cs,0);
io_out(di,0);
for(i=0;i<3;i++)//選擇通道
{
io_out(clk,0);
adc_addr=adc_addr<<1;
if(adc_inf0 &0x80)==0x80
io_out(di,1);
else
io_out(di,0);
io_out(clk,1);
}
io_out(clk,0); //一個(gè)時(shí)鐘的間隔
io_out(clk,1); //以使多路器穩(wěn)定
for(i=0;i<8;i++) //接收轉(zhuǎn)換結(jié)果
{
io_out(clk,0);
if(io_in(io_do)= =1)
{
adc_inbit=1;
adc_inbit=adc_inbit<<(7-i);
digital_out=digital_out+adc_inbit;
}
io_out(clk,1);
}
io_out(cs,1)
return digital_out;
}
4 結(jié)束語(yǔ)
Neuron芯片不同于普通的微處理器,本文介紹的神經(jīng)元芯片與A/D芯片TLC0832的兩種接口實(shí)現(xiàn)方法各有利弊,具體表現(xiàn)如下:
(1)方法1是Neuron芯片所特有的,而方法2較通用,它不僅適用于Neuron芯片,而且適用于各種有I/O腳的微處理芯片;
(2)方法1的硬件要求比較嚴(yán)格,可選的I/O腳只有一個(gè),即片選信號(hào)輸出腳,而方法2腳把幾個(gè)與TLC0832相連的I/O腳視為普通的I/O腳,隨便哪個(gè)I/O腳都可與TLC0832相連(如果Neuron芯片的IO8、IO9或IO10已用,那只能選方法2了);
(3)方法1編程較短,但不但于調(diào)試,而方法2則編程較長(zhǎng),但較為直觀,而且便于調(diào)試;
(4)方法1的CLK占空比和時(shí)鐘速率較為穩(wěn)定,而方法2的CLK占空比與指令執(zhí)行時(shí)間有關(guān)。對(duì)于常用單片機(jī)的人來(lái)說(shuō),方法2較易上手,則方法1則更專業(yè);方法2的硬件接法更靈活,但編程較長(zhǎng)……總之,使用這兩種方法應(yīng)根據(jù)實(shí)際情況靈活地作出選擇。





