TOP
|
| 基于MSP430F149单片机的SDRAM控制程序设计(2) |
| [ 录入者:elitist | 时间:2008-02-02 18:45:22
| 作者:朱海君1,2 ,李桂花1,2,敬 岚1,陆 军1 | 来源:
| 浏览:51次 ] |
3软件设计
MSP430的内核结构采用具有高透明格式的精简指令集(RISC)设计。指令分为硬件实现的内核指令和利用这一硬件结构的具有更高效率的模拟指令,使用起来非常方便。在本控制系统中,单片机完成初始化任务(设置标志位、看门狗的工作方式)后,就进入低功耗睡眠状态。中断将其唤醒,转而进入相应的子程序。基于MSP430F149单片机的SDRAM控制程序如下。 #include 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[i] = 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[i]; 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.
作者简介: 朱海君,男,讲师,硕士研究生,研究方向为计算机控制与嵌入式技术; 电话:0931-4969358 E-mail: haijun@impcas.ac.cn 李桂花,女,硕士研究生,研究方向为计算机控制与嵌入式技术; 电话:0931-4969358 E-mail: guihuali@impcas.ac.cn 敬 岚, 女,副研究员,硕士,硕导,研究方向为计算机控制与嵌入式技术 电话:0931-4969352 E-mail: jing@impcas.ac.cn 通信地址 (730000 中国科学院 近代物理研究所 信息工程研究室 ) 朱海君
|
|
|
|