系統級ADC芯片MSC1210介紹及應用
摘要:介紹德州儀器公司最近出品的帶有高性能8051內核的系統級ADC芯片——MSC1210。說(shuō)明8051內核單片機的特點(diǎn)、懷能以及片上Flash、24位高精度A/D轉換器的使用方法。利用MSC1210豐富的片上資源,可以很簡(jiǎn)單地構建精密數據采集系統。
本文引用地址:http://dyxdggzs.com/article/171343.htmMSC1210是德州儀器公司推出的系統級高精度ADC芯片系列,內置24位低功∑—ΔADC前端信號調理電路—多路模擬開(kāi)關(guān)、緩沖器、PGA、電壓參考,且集成了高性能8051處理器內核、Flash存儲器和32位累加器、兼容SPI串口等多片上外設。對于要求何種小、集成度高、精度高的測量系統,MSC1210是理想的選擇。
MSC1210的系統結構框圖如圖1所示。
1 MSC1210中高性能8051內核介紹
MSC1210系列芯片的所有指令與標準801兼容,相同各標志位、功能寄存器的功能也是一致的。但MSC1210在速度上有很大的提高:對于同樣的外部時(shí)鐘,指令執行速度提高1.5~3倍,這就使用戶(hù)可以使用較低的外部時(shí)鐘,以降低系統的哭聲和功耗。此外,MSC1210相對8051單片機還新增了一些功能寄存器,以完成對外設的控制功能。如可編程看門(mén)狗定時(shí)器,對系統程序的運行進(jìn)行監控,確保系統可靠運行。片上具有兩個(gè)全雙工的UART,使得在開(kāi)發(fā)模式有一個(gè)串口被占用的情況下,仍有一個(gè)可留給用戶(hù)使用。增加的帶有FIFO的SPI接口和PWM,為特定應用提供了極大的方便。
MSC1210還提供了雙數據指針,可以加速整塊數據的移動(dòng)。在訪(fǎng)問(wèn)外部數據存儲器時(shí),還可以使訪(fǎng)問(wèn)周期延展2~9個(gè)指令周期,以適應不同的外設速度。32位的累加器也可顯著(zhù)地減少系統開(kāi)銷(xiāo)。它可在幾個(gè)指令周期內完成24位ADC結果的加法或移位操作,而同樣的操作用軟件完成則需要上百個(gè)指令周期。
MSC1210內部的時(shí)鐘控制電路可以方便地設置不同的時(shí)鐘信號。其秒、毫秒、微秒定時(shí)中斷寄存器可以為系統定時(shí)控制提供方便,如設置內部Flash擦除時(shí)間、寫(xiě)入時(shí)間。MSC1210的所有I/O口都可以通過(guò)寄存器,配置成標準8051(上拉)、CMOS輸出、漏極開(kāi)路輸出、輸入四種方式中的一種。
2 MSC1210中存儲器配置和使用
MSC1210的片內存儲器包括:特殊功能豁口(SFR),Flash寄存器,Scratchpad RAM,Boot Rom和SRAM。MSC1210內置256字節的片內數據存儲器和128字節的SFR,這與8051內核單片機是相同的;唯一的區別是MSC1210定義了更多的特殊功能寄存器。MSC1210的位地址空間也與8051相同,內部RAM中的20H~2FH以及SFR中以0或8結尾的字節,都是可位尋址的。
MSC1210中還有2KB的Boot Rom,用來(lái)控制串/并行編程時(shí)的操作。當Boot Rom使能時(shí),其中的程序在用戶(hù)模式下是可以訪(fǎng)問(wèn)的,這時(shí),它的程序被定位在F800H~FFFFH;而在編程模式下,Boot Rom被定位在程序存儲器開(kāi)始的2KB中。Boot Rom中含有一些調試編程常用的程序,如:
void autobaud(void);//設置波特率
char write_flash_chk(int fadd,char fdat,char fdm);//寫(xiě)Flash并校驗
根據型號的不同,MSC1210系列有4KB到32KB的Flash存儲器。此外,片內還提供1KB的SRAM作為數據存儲器。它也是通過(guò)MOVX指令訪(fǎng)問(wèn)的。SRAM的地址可從0000H或8000H開(kāi)始,而Flash數據存儲器的地址緊接SRAM。
Flash存儲器作為數據存儲器使用前,首先要對硬件寄存器0(HCR0)的低3位進(jìn)行設置,分配數據存儲空間的大小。根據晶振頻率,設置MSEC和USEC寄存器來(lái)提供Flash存儲器的擦除和寫(xiě)時(shí)間。擦除和寫(xiě)入可以直接調用Boot Rom中的程序,編程示意代碼如下:
#includestdio.h> //頭文件引用
#includemsc1210.h>
#include“rom1210.h”
#define PAGESTART 0x0400 //定義進(jìn)行改寫(xiě)的頁(yè)面
#define PAGESIZE 0x80
char xdata*Pflashpage;定義指向此頁(yè)面的指針
char xdata buffer[PAGESIZE];//在XRAM里開(kāi)辟緩沖區
int main()
{char result;unsigned char i;
autobaud();//調用BootRom中子程序,自動(dòng)設置波特率,與計算機通信,返回調試信息
Pflashpage=(char xdata*)PAGESTART
USEC=12-1;MSEC=12000-1; //以12MHz晶振為例,設置
………… //毫秒、微秒寄存器
for(i=0;ipagesize;i++)//從Flash中讀取一個(gè)頁(yè)面到XRAM
buffer[i]=*Pflashpage++;
buffer[0]+=1; //改變首字節值以重新寫(xiě)入
page_erase(PAGESTART,0XFF,DATA_FLASH);//擦除頁(yè)面內容,BootRom內帶程序
result=0;
for(i=0;ipagesize;i++)
result=result|write_flash_chk(pagestart+i,buffer[i],DATA_FLASH);//將修改后的數據寫(xiě)入,Boot Rom內帶程序
存儲器相關(guān)文章:存儲器原理
評論