對(duì)于MCU開(kāi)發(fā)者,端口的上下拉再熟悉不過(guò)了。硬件的設(shè)計(jì)人員也會(huì)特別關(guān)注每一個(gè)引腳的上電默認(rèn)電平。但是AG32的大部分端口在程序加載前是floating狀態(tài)的。復(fù)位結(jié)束后,FPGA的配置程序開(kāi)始從flash里加載,加載時(shí)間隨著程序的大小略有區(qū)別,一般在20mS,也就是說(shuō),在上電復(fù)位后到端口上下拉起效,至少還有20多mS的不定狀態(tài)。很多開(kāi)發(fā)人員往往因?yàn)檫@短暫的20mS,導(dǎo)致系統(tǒng)無(wú)法啟動(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的上下拉是通過(guò)改變CPLD里的配置來(lái)實(shí)現(xiàn)的。也就是說(shuō),AG32如果要?jiǎng)討B(tài)改變上下拉,那就比較麻煩。MCU需要通過(guò)FCB接口(FPGA CONTROL BLOCK)來(lái)重新配置CPLD。AGM提供了官方例程,但是客戶用的比較少,因此這里也不介紹了。如果有需要的,我們可以微信探討。
同樣,在某些場(chǎng)合,開(kāi)發(fā)者需要增強(qiáng)端口驅(qū)動(dòng)能力,以此來(lái)增加可靠性,增加抗干擾能力。這同樣也在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è)置起來(lái)的確麻煩一點(diǎn),開(kāi)發(fā)者需要注意一下。