打印

AT91SAM7X256程序问题

[复制链接]
3671|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lee1980|  楼主 | 2008-3-12 18:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
sasinop| | 2008-3-12 18:52 | 只看该作者

这个也要要呀??

使用特权

评论回复
板凳
sasinop| | 2008-3-12 18:53 | 只看该作者

中断函数

============================================================*/
__ramfunc void Usart_232_irq_handler(void)
{
    AT91PS_USART USART_pt = AT91C_BASE_US1;
    unsigned int status;
    unsigned int temp;    // 08-01-15 modify
        
  status = USART_pt->US_CSR;
    
  if ( status & AT91C_US_RXRDY)
  {
    temp = AT91F_US_GetChar(USART_pt);
    if (G_usart1_receiveing==1)
    {
        if (G_usart1_received_en==1)//receive the data
        {
            G_usart1_recive_buf[G_usart1_receive_datalen] = temp;
            G_usart1_receive_datalen++;
            G_usart1_receive_length--;
            G_chksum1+=temp;
                
            if(G_usart1_receive_length==0)
            {
               if ((G_chksum1 & 0x00ff)==0)
                      {
                if (G_enabledprocess==1)
                G_sciokflag1=1;
                }
                    G_usart1_receiveing=0;
                    G_usart1_received_en=0;
                }
                        
              return;
          }
                  else    //receive the length for data
          {
                G_usart1_receive_length = temp;
            G_usart1_recive_buf[1] = temp;
                G_usart1_receive_datalen = 2;
            G_usart1_received_en = 1;
            G_chksum1+=temp;
                return;
                  }
      }
    else if(temp == RECEIVE_BOOT_CODE)//receive boot code
    {
    G_usart1_receiveing = 1;
        G_usart1_recive_buf[0] = RECEIVE_BOOT_CODE;
        G_chksum1=RECEIVE_BOOT_CODE;
        return;
    }
  }
if ( status & AT91C_US_TIMEOUT)
  {
    USART_pt->US_CR=AT91C_US_RSTRX;
    USART_pt->US_CR=AT91C_US_RXEN;
  }
    //* Reset the satus bit
   
  G_usart1_received_en=0;
  G_usart1_receiveing=0;
  USART_pt->US_CR = AT91C_US_RSTSTA;
}

使用特权

评论回复
地板
sasinop| | 2008-3-12 18:54 | 只看该作者

初始化


void Usart_Init ( void )
{
    AT91PS_USART COM0 = AT91C_BASE_US0;
    AT91PS_USART COM1 = AT91C_BASE_US1;

     //* Configure PIO controllers to periph mode
  AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
         ((unsigned int) AT91C_PA21_RXD1   ) |
         ((unsigned int) AT91C_PA22_TXD1   ) |
         ((unsigned int) AT91C_PA5_RXD0        ) |
         ((unsigned int) AT91C_PA6_TXD0        ) , // Peripheral A
         0); // Peripheral B

  // First, enable the clock of the PIOB
  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US1 ) ;
    AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US0 ) ;
    // Usart Configure
  AT91F_US_Configure (COM1, MCK, AT91C_US_ASYNC_MODE, SciBaudRate, 0);
    AT91F_US_Configure (COM0, MCK, AT91C_US_ASYNC_MODE, SciBaudRate, 0);

    // Enable usart
    COM1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
    COM0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;

  //* Enable USART IT error and RXRDY
  AT91F_US_EnableIt(COM1,AT91C_US_TIMEOUT | AT91C_US_FRAME | AT91C_US_OVRE |AT91C_US_RXRDY);
    AT91F_US_EnableIt(COM0,AT91C_US_TIMEOUT | AT91C_US_FRAME | AT91C_US_OVRE |AT91C_US_RXRDY);
    //AT91F_US_EnableIt(COM1,AT91C_US_RXRDY);

  //* open Usart  interrupt
    AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US1, USART_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, Usart_232_irq_handler);
    //AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US0, USART_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, Usart_485_irq_handler);
    
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);

  COM1->US_RTOR = 20;   //超时时间设定为20个字符时间
  COM0->US_RTOR = 20;   //超时时间设定为20个字符时间
}

使用特权

评论回复
5
sasinop| | 2008-3-12 18:55 | 只看该作者

设置拨特率

void SetBaudRate(unsigned char baudrate)
{
  switch(baudrate)
  {
    case 0x04:        //9600=0.15%
        SciBaudRate = 9600;            
    break;
    case 0x05:        //19200=0.15%
    SciBaudRate = 19200;    
    break;
    case 0x06:        //38400=0.47%
    SciBaudRate = 38400;    
    break;
    case 0x08:        //115200=0.47%
    SciBaudRate = 115200;    
    break;
    default:        //57600=0.47%        
    SciBaudRate = 57600;    
    break;    
    }
        
  AT91F_US_SetBaudrate(AT91C_BASE_US1, MCK, SciBaudRate);
  AT91F_US_SetBaudrate(AT91C_BASE_US0, MCK, SciBaudRate);
}

使用特权

评论回复
6
lee1980|  楼主 | 2008-3-12 19:33 | 只看该作者

多谢!

多谢楼上的朋友!我去试一下

使用特权

评论回复
7
lee1980|  楼主 | 2008-3-12 19:42 | 只看该作者

...

朋友,能不能把相关的标识符定义也一起传上来?

使用特权

评论回复
8
sasinop| | 2008-3-12 20:14 | 只看该作者

和额

中断里,的变量,你自己根据自己的需求定义

方法就那样

使用特权

评论回复
9
lee1980|  楼主 | 2008-3-12 20:38 | 只看该作者

哦!

我刚开始弄这个,可不可以把你定义的给我参考一下?朋友

使用特权

评论回复
10
xhtxzxw| | 2008-3-13 13:50 | 只看该作者

嘿嘿

那些大写继母的标识符定义都在样例代码里有。

使用特权

评论回复
11
lee1980|  楼主 | 2008-3-13 15:32 | 只看该作者

...

主要是中断里的那些,你说的例程代码是在ATMEL网站里么?

使用特权

评论回复
12
xhtxzxw| | 2008-3-14 23:09 | 只看该作者

嘿嘿

是的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

66

帖子

0

粉丝