首页 | 模拟电子 | 单片机 | 电源技术 | 通信/总线 | 工业控制 | 传感器件 | 我要投稿 | 访客留言 | 资料下载 | 内容搜索
>首页 -> 技术文章 -> 单片机

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  中国科学院 近代物理研究所 信息工程研究室 ) 朱海君

<< < 1 2 > >> 2/2
[上一篇]调试MSP430系列出现的一些另类问题 [下一篇]i2c 程序(c语言)

相关栏目

最新文章

热门文章

推荐文章

相关文章

广告位