ADuC7026是美国ADI公司ADuC70xxARM系列中最典型的一种,其最大特点是具有一路12通道、12bit、速度达1MSPS的ADC;4路12bit的DAC;以及可编程逻辑阵列(PLA)等。
1、 ADuC7026的SPI口只有8位,只能与8位外部SPI接口器件通信。如果外设SPI口是16位的,如AD9833(DDS),则只有采用普通I/O方式仿真SPI口进行通信。
2、ADuC7026所有I/O专用置“1”、清“0”寄存器GPxSET/GPxCLR都是“只写”的,不能读!如果读,输入为全“1”(“FF”),不是实际的输出状态。因此在C语言中只能使用:
GPxSET(或GPxCLR) = xx;直接赋值,而不能使用:
GPxSET(或GPxCLR) |= xx;
因为“|="复合运算符是先读入,在”或“运算,然后赋值(写)。如果使用”|=“,则因读入值为”FF“,运行后写入寄存器的是全”1“,相当于将”xx“I/O口所有位置”1“(或清”0“)了。
3、与所有ARM处理器一样,ADuC7026的外部中断也是电平触发,高电平有效。电平触发比边沿触发要可靠些,不易产生误中断(特别在中断信号有毛刺时),但要注意在退出中断处理程序前要撤销中断源的中断请求,否则会连续触发。如果确要使用边沿触发,可使用外部逻辑电路(或ADuC7026内部PLA将外部触发信号的边沿检测出来,产生宽度不小于4.5us的正脉冲送到ADuC7026即可,ADuC7026本身还是电平触发(无法改变的!)。
4、IRQSTA与IRQSIG的区别:IRQSTA是使能中断状态寄存器,表示当前”已经使能的“中断源状态;IRGSIG是中断状态寄存器,主要反映外部中断引脚IRQSIG0~3上的电平状态。
因此,如果是查询外部中断,最好使用IRGSIG,如果是查询内部中断(如定时器、串口等),则一般都使用IRGSTA。
5、用J-Link全功能ARM仿真器时,发现在KARM(Keil C for ARM)调试时无法将编译后的程序写入Flash中,但用驱动程序自带的J-FlashARM工具就可以。
后经试验发现是驱动程序装了最新版的V4.10i,改装较老版本V4.08i的就可以了。其原因是所用J-Link仿真器是国内仿制品,缺少支持最新版驱动V4.10i的License,因为KARM调试加载Flash时需要仿真器的License。
5、使用KARM v2.42调试ADuC7026的串口通信程序时没有任何问题,但改用MDK v4.02时,串口通信程序收发数据都不正确。
后经分析发现是串口通信程序UART.c中没有对系统时钟初始化,而是使用系统自带的启动文件”startup.s“(KARM)或"ADuC702x.s"(MDK)中的初始化程序。但这2个程序的初始化有些不同。前者分频参数CD=0;后者CD=1。相当于系统时钟前者为41.78MHz,后者为20.89MHz。这样,UART.c中使用相同参数设置波特率时,两者的实际波特率正好差1倍,如果上位机波特率不变,当然通信就有问题了。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。