 |
 |
培訓信息 |
|
|
|
 |
 |
贊助商 |
|
|
|
|
 |
 |
基于MSP430F149單片機的SDRAM控制程序設計 |
|
|
| 基于MSP430F149單片機的SDRAM控制程序設計 |
| 作者:jdzj868 來源:機電之家下載站 錄入:jdzj868 更新時間:2009-12-2 16:54:32 點擊數:0 |
【字體:
】 |
摘 要:本文介紹了德州儀器公司新一代16位Flash型MSP430F149系列單片機的結構、特性和功能,闡述了基于該單片機控制系統的硬件組成和軟件設計,并給出了該控制器在SDRAM控制系統中的應用,具有功耗低、功能齊全、人機界面友好等優點。
1 引言 MSP430系列微控制器是美國德州儀器(Texas Instruments)公司推出的功能強大的超低功耗Flash型16位RISC指令集微處理器。在運算速度方面,MSP430系列單片機能在8MHz晶體的驅動下,實現125ns的指令周期。16位數據寬度、125ns的指令周期以及多功能的硬件乘法器(能實現乘加)相配合,能實現數字信號處理的一些算法(如FFT等)。MSP430具有非常高的集成度,單片集成了多通道12bit的A/D轉換、片內精密比較器、多個具有PWM功能的定時器、斜邊A/D轉換、片內USART、看門狗定時器、片內數控振蕩器(DCO)、大量的I/O端口以及大容量的片內存儲器,單片可以滿足絕大多數的應用需要。
SDRAM控制系統采用MSP430F149單片機。該單片機具有強大的處理能力、豐富的片上外圍模塊和方便高效的開發方式, 是MSP430系列中功能最強大的一款。MSP430F149采用馮--紐曼結構,RAM、ROM和全部外圍模塊都位于同一個地址空間內, 具有一個硬件乘法器、6個I/O端口(每個有8個I/O口)、1個精確的模擬比較器、2個具有捕捉/比較寄存器的定時器、8路12位A/D轉換器、片內看門狗定時器、2個串行通信接口和60KB的FlashROM,2KB RAM。MSP430F149還具有強大的擴展功能,其具有48個I/O引腳,每個I/O口分別對應輸入、輸出、功能選擇、中斷等多個寄存器,使得功能口和通用I/O口可以復用,大大增強了端口功能和靈活性,十分適合開發的要求,所以選用其作為SDRAM系統的控制主芯片。
2 硬件系統組成
國家重大科學工程HIRFL-CSR(蘭州重離子加速器冷卻存儲環)的控制系統由兩部分構成:總體控制和前端控制服務器。總體控制包括網絡通信支持系統、集群服務系統、數據庫系統。前端控制服務器用來提供對受控目標和裝置的完全控制,它們可以接收命令和數據,運行算法,向設備送出控制信號,返回設備的狀態和數據,提供人機界面等。按照現場要求執行開環或閉環控制,從而完成對CSR電源系統,注入引出系統,內靶系統,真空系統,溫度測控系統, 電子冷卻系統等各個分系統的監視測量,故障報警,操作和控制。
基于MSP430F149單片機的SDRAM控制系統包括:PC機、微控制器、CPLD、FPGA、SDRAM。數據通過PC傳送給微控制器MSP430F149,單片機收集到數據以后,經過一定的算法發送適當的命令給雙向數據轉換器和SDRAM控制器,從而完成對SDRAM數據的讀寫和刷新等控制操作。
3軟件設計
MSP430的內核結構采用具有高透明格式的精簡指令集(RISC)設計。指令分為硬件實現的內核指令和利用這一硬件結構的具有更高效率的模擬指令,使用起來非常方便。在本控制系統中,單片機完成初始化任務(設置標志位、看門狗的工作方式)后,就進入低功耗睡眠狀態。中斷將其喚醒,轉而進入相應的子程序。基于MSP430F149單片機的SDRAM控制程序如下。
#include <msp430x14x.h>
void Init(void);
void Send(char* Data, unsigned int Length);
void SendAddress(unsigned int Address);
void SendData(unsigned int Data);
unsigned int ReceiveData(void);
char ReadData[20], Buffer[20];
unsigned char i=0, j, k, flag=0;
unsigned int Data;
unsigned int DisplayData;
char DisplayString[20];
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
Init(); // UART1 inition
_EINT(); // enable interrupt
while(1) { DisplayData = ReceiveData();
if (DisplayData == 0) { k = 0; if (DisplayData != 0) { DisplayString[k] = 0 + DisplayData % 10;
DisplayData = DisplayData / 10;
k++; }
Send(DisplayString, k);
}
}
}
void Init(void) {
UCTL1 &= ~SWRST; // reset swrst and usart1 enable UCTL1 = 0x10; // 8-bit character UBR01 = 0x03; // 8MHz 38400 UBR11 = 0x00; // 8MHz 38400
UMCTL1 = 0x4A; // U1CLK = SMCLK=TX2 UTCTL1 = 0x10;
ME2 |= 0x30; // Enable USART1 TXD/RXD
P3SEL= 0xC0; // enable P3.6,7 USART1 TXD/RXD
P3DIR= 0x40; // P3.6 output direction
IE2 |= URXIE1; // Enable USART1 RX interrupt
}
interrupt [UART1RX_VECTOR] void UART1RX(void) // read data { if (flag == 0) // wait for strat char of 0xAA or 0xDD {
if (RXBUF1 == 0xAA) // alter flag { flag = 1; }
else if (RXBUF1 == 0xDD) // alter flag { flag = 2; }
i = 0;
}
else { ReadData = RXBUF1; if (ReadData[i++] == 0xFF) // end char of 0xFF { Data = 0; for (j=i-1; j!=0; j--) {
Data = Data * 10 + (ReadData[j] - 0);
}
if (flag == 1) // send address { SendAddress(Data); }
else if (flag == 2) // send data { SendData(Data); }
flag = 0; }
}
}
void Send(char* Data, unsigned int Length) // send data { unsigned int i; UCTL1 |= TXWAKE; TXBUF1 = 0x01; while ((UTCTL1&0x01) == 0);
UCTL1 &= ~TXWAKE;
for(i=0; i<=Length; i++) { TXBUF1 = Data; while ((UTCTL1&0x01) == 0); }
}
void SendAddress(unsigned int Address) // send address { // address buses P1DIR |= 0xE0; // P1.5-1.7 address buses
P2DIR = 0xFF; // P2.0-2.7 address buses
P3DIR |= 0x1F; // P3.0-3.5 address buses
P4DIR |= 0x1F; // P4.0-4.5 address buses
P1OUT |= (Address & 0x07);
P2OUT |= (Address & 0x7F8) >> 3;
P3OUT |= (Address & 0x1F800) >> 11;
P4OUT |= (Address & 0x7E0000) >> 17; }
void SendData(unsigned int Data) // send data { // data buses P4DIR |= 0xC0; // P4.6-4.7 data buses P5DIR |= 0x1F; // P5.0-5.5 data buses P4OUT |= (Data & 0x03); P5OUT |= (Data & 0xFC) >> 2; }
unsigned int ReceiveData(void) // send data { unsigned int Data; // data buses
P4DIR &= 0x3F; // P4.6-4.7 data buses
P5DIR &= 0xE0; // P5.0-5.5 data buses
Data = ((P5IN & 0x1F) << 2) | ((P4IN & 0xC0) >> 6); return Data; }
4 結語
MSP430F149是一種新型的混合信號處理器,采用了美國德州儀器(Texas Instruments)公司最新低功耗技術(工作電流為0.1~400uA)。該系列將大量的外圍模塊整合到片內,特別適合于開發和設計單片系統。基于MSP430F149單片機的SDRAM控制系統,具有較強的通用性和擴展性,滿足了高速數據采集和處理的實時要求。
基金項目:HIRFL-CSR國家實驗室國家“九五”重大科學工程項目
參考文獻 [1] 敬嵐,朱海君,梁義海,等.基于AT89C51的云臺鏡頭監控系統設計及其應用[J].電氣自動化,2003,25(Z06): 29~30. [2] 敬嵐,朱海君,張碩成,等.加速器控制系統中的32路數字I/O模塊設計[J].電氣自動化,2003,25(Z06):59~60. [3] 敬嵐,朱海君,張碩成,等.基于MSP430F149單片機的步進電機控制系統設計[J].電氣自動化,2003,25(Z06):125~126. [4] 朱海君,敬嵐. 微控制器及其在控制系統中的應用[J].電子元器件應用,2004(1):39~42. [5] 朱海君,劉彩虹,敬嵐.智能控制芯片HD7279A及其應用設計[J].中國儀器儀表,2004,(3):36~37. [6] 朱海君,敬嵐,陸軍. 基于MSC1210單片機的串口通訊設計[J].微計算機信息,2004,(4): 48~36. [7] 朱海君,敬 嵐,喬衛民.SDRAM控制器的設計及其在CSR控制系統中的應用[J].電氣自動化,2004,26(Z04):43~44.
|
|
|
發表評論 告訴好友 打印此文 收藏此頁 關閉窗口 返回頂部 |
|
|
 |
 |
網友評論:(只顯示最新5條。) |
|
|
|
|
|