搜索
bottom↓
回复: 2

请问:LM3S串口程序出错(KEIL软件仿真)

[复制链接]

出0入0汤圆

发表于 2008-3-25 18:20:17 | 显示全部楼层 |阅读模式
#include "config.h"

BUF_Create(buf1,11);

THR_Create(Thread1);
THR_Create(Thread2);
TMR_Create(timer1);
TMR_Create(timer2);
BUF_Create(UartBuf,100);
MUT_Create(UartMut,1);

uint8 UARTIsBusySend(uint32 base)
{  
      UARTIntDisable(UART0_BASE,UART_INT_TX);
      if(HWREG(base + UART_O_FR) & UART_FR_BUSY)
      {
        UARTIntEnable(UART0_BASE,UART_INT_TX);
          return 1;
      }
      UARTIntEnable(UART0_BASE,UART_INT_TX);
      return 0;
}

uint8 UartPutChar(uint32 base,const uint8 data)
{

  if(!UARTIsBusySend(base))
  {
    HWREG(base + UART_O_DR) = data;
    return 1;
  }
  else
  {
    return BUF_PutChar(&UartBuf,data);
  }
}

uint8 UartPut(uint32 base,const void *pdata,uint8 size)
{
  uint8 i=0;
  if(!UARTIsBusySend(base))
  {
      UARTIntDisable(UART0_BASE,UART_INT_TX);
      while(UARTSpaceAvail(base))
       {
          HWREG(base + UART_O_DR) = ((uint8 *)pdata);
         if(++i>=size)
          {
            UARTIntEnable(UART0_BASE,UART_INT_TX);
            return 1;
          }
        }
      UARTIntEnable(UART0_BASE,UART_INT_TX);
      for(;i<size;i++)
      {
        if(!BUF_PutChar(&UartBuf,((uint8 *)pdata)))
        {
           return 0;
         }
      }
  }
  else
  {
    for(i=0;i<size;i++)
    {
    if(!BUF_PutChar(&UartBuf,((uint8 *)pdata)))
        {
           return 0;
         }
    }
  }
   return 1;
}

uint8 UartPutString(uint32 base,const void *pdata)
{
uint8 size=strlen((char *)pdata)+1;
return UartPut( base,pdata,size);
}

SIGNAL(INT_UART0)
{
  uint8 temp;
  uint32 status=UARTIntStatus(UART0_BASE,true);
    UARTIntClear(UART0_BASE, status);
   
    if(status&UART_INT_TX)
    {
        while(UARTSpaceAvail(UART0_BASE))
       {
          if(!UartBuf.BufGetChar(&temp))
         {
            return ;
         }
         HWREG(UART0_BASE + UART_O_DR) = temp;
     }
  }
}

uint8 Thread1(Tpt *pt)
{
  PT_BEGIN(pt);
    while(1)
    {
      GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_4,~GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_4));
      MUT_Pend(&UartMut);
      PT_WAIT_UNTIL(pt,!UARTIsBusySend(UART0_BASE));
      UartPutString(UART0_BASE,"Thread1 is running-------------------------------\n");
      PT_WAIT_UNTIL(pt,!UARTIsBusySend(UART0_BASE));
      MUT_Post(&UartMut);
      PT_TIMER_DELAY(&timer1,OS_TICKS_PER_SEC/3);
    }
   PT_END(pt);
}

uint8 Thread2(Tpt *pt)
{
   PT_BEGIN(pt);
    while(1)
    {
      GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_5,~GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_5));
      MUT_Pend(&UartMut);
      PT_WAIT_UNTIL(pt,!UARTIsBusySend(UART0_BASE));
      UartPutString(UART0_BASE,"Thread2 is running*******************************\n");
      PT_WAIT_UNTIL(pt,!UARTIsBusySend(UART0_BASE));
      MUT_Post(&UartMut);
      PT_TIMER_DELAY(&timer2,OS_TICKS_PER_SEC/2);   
    }
   PT_END(pt);
}

int main()
{
  cli();
  IntPriorityGroupingSet(2);
  IntPrioritySet(FAULT_SYSTICK, 3 << 6 | 1 << 5);         

//SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ);
SysCtlClockSet(SYSCTL_SYSDIV_10|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIODirModeSet(GPIO_PORTB_BASE,GPIO_PIN_4|GPIO_PIN_5,GPIO_DIR_MODE_OUT);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
                                              // 设置GPIO的A0和A1为UART引脚。(A0->RXD,A1->TXD)
UARTConfigSet(UART0_BASE, 9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |UART_CONFIG_PAR_NONE));
                                              // 配置UART 为 9600波特率, 8-N-1模式发送数据。
UARTFIFOLevelSet(UART0_BASE, UART_FIFO_TX4_8,UART_FIFO_TX4_8);  
UARTIntEnable(UART0_BASE, UART_INT_TX);
IntEnable(INT_UART0);

SysTickPeriodSet(SysCtlClockGet()/OS_TICKS_PER_SEC-1);
SysTickEnable();

IntEnable(FAULT_SYSTICK);
sei();
   
    while(1)
  {
     PT(Thread1)->execute();
     PT(Thread2)->execute();
  }
  
  //return 0;
}

1

出0入0汤圆

发表于 2008-4-3 22:58:26 | 显示全部楼层
顶 爱生活 爱阿莫

我也是刚580买周工的群星板子 有空交流

出0入0汤圆

发表于 2008-8-11 13:24:02 | 显示全部楼层
以下蓝色文字由版主:bluelucky 于:2008-08-11,13:24:02 加入。
<font color=black>请发贴人注意:
本贴放在这分区不合适,即将移走
原来分区:[1032]ARM技术论坛
即将移去的分区:[3011]Cortex-M3技术讨论区
移动执行时间:自本贴发表0小时后

任何的疑问或咨询,请可随时联系站长。谢谢你的支持!
</font>
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 15:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表