FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:
1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 --2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
3)FPGA内部有丰富的触发器和I/O引脚。
4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成悄枝度、可靠性的最佳选择之一。
目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即裂运缓可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。
FPGA有多肆模种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
下面是我以前用过的一个程侍指序,不过是MEGA32的,我没用过mega16,楼主只要将以下用到的控制寄存器修改成mega16的即可:基本思想是初始化程序中设定好自动连续转换,再在中断服务程序中读取结果(每中断一次获得一个通道的转换结果值)。
void adc_init(void)
{
ADCSR = 0x00 // disable adc
ADMUX = 0xC0 // 参考电压选老银配择片内基准电压 2.56V,从PA0号通道开始
ACSR = 0x80 // 不用模拟比较器
ADCSR = 0x89// 启动ADC,转换结果右对齐,分频因子 2
ADC_chn = 0x00 // 选择第一个通道(PA0)
}
void adc_isr(void)
{
UINT ADC_value
ADCSR |= 0x10 // 清 AD 完成标志
ADC_value = ADCL// 先读低搏锋八位数据
ADC_value |= (int)ADCH <<8// 再读高二位数据并移至高字节
if ( ADC_chn == 0x00 )
{input[0] = ADC_value// 保存PA0的值
}
else if ( ADC_chn == 0x01 )
{input[1] = ADC_value// 保存PA1的值
}
else if ( ADC_chn == 0x02 )
{ input[2] = ADC_value// 保存PA2的值
}
。。。。。。。。
else if ( ADC_chn == 0x07 )
{ input[7] = ADC_value// 保存PA7的值
}
ADC_chn ++ // 通道号加 1
if ( ADC_chn >0x07 ) ADC_chn = 0x00
ADMUX = 0xC0 + ADC_chn // 切换通道
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)