對(duì)于MCU開發(fā)者,端口的上下拉再熟悉不過了。硬件的設(shè)計(jì)人員也會(huì)特別關(guān)注每一個(gè)引腳的上電默認(rèn)電平。但是AG32的大部分端口在程序加載前是floating狀態(tài)的。復(fù)位結(jié)束后,FPGA的配置程序開始從flash里加載,加載時(shí)間隨著程序的大小略有區(qū)別,一般在20mS,也就是說,在上電復(fù)位后到端口上下拉起效,至少還有20多mS的不定狀態(tài)。很多開發(fā)人員往往因?yàn)檫@短暫的20mS,導(dǎo)致系統(tǒng)無法啟動(dòng),或者進(jìn)入一個(gè)未知的狀態(tài)。因此,一般建議設(shè)計(jì)人員對(duì)上電電平有要求的引腳外加適當(dāng)?shù)纳?a class="article-link" target="_blank" href="/baike/519050.html">下拉電阻。AG32內(nèi)部的上下拉電阻的阻值在40k左右。
AG32的上下拉在ASF文件里配置,
比如給PIN96設(shè)置上拉:
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to PIN_96
或者
set_instance_assignment -name CFG_KEEP -to PIN_96 2'b10 -extension
這兩種方法效果一樣,可以只用其中一種。如果兩個(gè)都用,那就是同時(shí)用兩個(gè)40k電阻上拉,相當(dāng)于20k上拉。
如果給PIN96設(shè)置下拉,則使用以下方式:
set_instance_assignment -name CFG_KEEP -to PIN_96?2'b01 -extension
設(shè)置下拉就一種方法,也就是只能40k下拉。
從上面也可以看出,AG32的上下拉是通過改變CPLD里的配置來實(shí)現(xiàn)的。也就是說,AG32如果要?jiǎng)討B(tài)改變上下拉,那就比較麻煩。MCU需要通過FCB接口(FPGA CONTROL BLOCK)來重新配置CPLD。AGM提供了官方例程,但是客戶用的比較少,因此這里也不介紹了。如果有需要的,我們可以微信探討。
同樣,在某些場合,開發(fā)者需要增強(qiáng)端口驅(qū)動(dòng)能力,以此來增加可靠性,增加抗干擾能力。這同樣也在ASF文件里配置。
如增強(qiáng)PIN96的驅(qū)動(dòng)能力到16mA:
set_instance_assignment -name CURRENT_STRENGTH -to PIN_96 16MA
驅(qū)動(dòng)能力最高可以到32mA, 2mA一個(gè)step。
相比其它MCU,?AG32在這方面設(shè)置起來的確麻煩一點(diǎn),開發(fā)者需要注意一下。