⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于AT91SAM7S的USART程序
💻 C
字号:
/******************************************************************************
 *         ATMEL Microcontroller Software Support  -  ROUSSET  -
 ******************************************************************************
 * The software is delivered "AS IS" without warranty or condition of any
 * kind, either express, implied or statutory. This includes without
 * limitation any warranty or condition with respect to merchantability or
 * fitness for any particular purpose, or against the infringements of
 * intellectual property rights of others.
 ******************************************************************************
 * File Name           : main.c
 * Object              : main application written in C
 * Creation            : JPP 03/Jun/03
 * 1.0 13/Aug/03 JPP   : Add the PDC block management
******************************************************************************/

// Include Standard LIB  files
#include "Board.h"
#include "main.h"
#include "AT91SAM7S64a.H"                       /* AT91SAMT7S64 definitions  */
#include "lib_AT91SAM7S64a.h"

#define 	BUFF_BASE_ADDR  	(( char *)(0x1C00))
#define 	AT91DKC_BASE_ADDRESS	(( char *)(0x00100000))
#define 	BLOCK_SIZE	(1024 * 10)

static const char POLLING_header[]={"\n\r  *** ATMEL POLLING ***\n\r"};
static const char PDC_header[]={"\n\r  *** ATMEL PDC ***\n\r"};
static const char PDC1_header[]={"\n\r  *** ATMEL PDC 1 ***\n\r"};
static const char PDC2_header[]={"\n\r  *** ATMEL PDC 2 ***\n\r"};

volatile char message[80];

/******************************************************************************
 * Function Name       : menu
 * Object              : Usart debug menu
 * Input Parameters    : None
 * Output Parameters   : None
******************************************************************************/
void menu( char value)
{
  unsigned int i,j;
  char *pt_char;
  switch (value) {
	case '0': //* info
		  sprintf((char*) message,"AT91C_US0_CSR %X\n\r",(unsigned int) *AT91C_US0_CSR);
		  AT91F_DBGU_Printk((char*)message);
	break;
	case '1': //* Print in pooling
           //* PDC 1 Frame
    		AT91F_US_SendFrame((AT91PS_USART) AT91C_BASE_DBGU,
    		"Write in US0\n\r",sizeof("Write in US0\n\r"),0,0);
		AT91F_US_Printk("Test\n\r");

	break;
	case '2': //* Print in PDC
    		//* PDC 1 Frame
    	AT91F_US_SendFrame((AT91PS_USART) AT91C_BASE_DBGU,
    	"Send Frame US0\n\r",sizeof("Send Frame US0\n\r"),0,0);
		AT91F_US_Print_frame("Send Frame US0\n\r",sizeof("Send Frame US0\n\r"));
	break;
	case '3': //* Print in PDC
    	//* PDC 1 Frame
    	AT91F_US_SendFrame((AT91PS_USART) AT91C_BASE_DBGU,"Send Frame US0\n\r",sizeof("Send Frame US0\n\r"),0,0);
		//* PDC  2 Frame
		AT91F_US_Print_2_frame((char *)PDC1_header,sizeof(PDC1_header),(char *)PDC2_header,sizeof(PDC2_header));
	break;
	case '4': //* Send Block
 		pt_char =  AT91DKC_BASE_ADDRESS;
    		sprintf((char*) message,"init Block :%X\n\r",pt_char);
    	        AT91F_DBGU_Printk((char*)message);
    		for (i=0; i < BLOCK_SIZE;i++)
    		{
		    *pt_char='0';
		    pt_char++;
    		}
 		pt_char = AT91DKC_BASE_ADDRESS;
    	        AT91F_DBGU_Printk("send \n\r");
    		sprintf((char*) message,"send  from %X sisez %d Kbytes\n\r",pt_char,BLOCK_SIZE);
    	        AT91F_DBGU_Printk((char*)message);
		AT91F_US_Print_frame(pt_char,BLOCK_SIZE);
	break;
	case '5': //* Send Block
 		pt_char = AT91DKC_BASE_ADDRESS;
    		sprintf((char*) message,"init Block :%X\n\r",pt_char);
    	        AT91F_DBGU_Printk((char*)message);
    		for (i=0; i < (124*1024)/16;i++)
    		{
    			for (j=0; j <16;j++)
    			{
    			    *pt_char='0'+j; pt_char++;
    			}
    		}
 		pt_char = AT91DKC_BASE_ADDRESS;
    	AT91F_DBGU_Printk("send 30K bytes on USART \n\r");
    	//* for transfert 10 K byte In first transfert (10Kbyte - 1 ) PDC max size end next at: 20 Kbyte +1
		AT91F_US_Print_2_frame( AT91DKC_BASE_ADDRESS,(10*1024)-1,AT91DKC_BASE_ADDRESS+(10*1024)-1,(20*1024)+1);
	break;
	case '6': //* Set time out
    	AT91F_DBGU_Printk("Set Time out\n\r");
   		// *Enable usart SSTO
		AT91F_US_STT0();
	break;

	default:
		AT91F_DBGU_Printk("\n\r");
		break;
	}
}//* End

/******************************************************************************
 * Function Name       : main
 * Object              : Main function
 * Input Parameters    : none
 * Output Parameters   : TRUE
*******************************************************************************/
int main( void )
//* Begin
{
    char value;
    //* Init DBGU
    AT91F_DBGU_Init();
    //* Polling
    AT91F_DBGU_Printk((char*)POLLING_header);
    //* PDC 1 Frame
    AT91F_US_SendFrame((AT91PS_USART) AT91C_BASE_DBGU, (char *)PDC_header,sizeof(PDC_header),0,0);
    //* Wait end of frame
    while (AT91F_PDC_IsTxEmpty (AT91C_BASE_PDC_DBGU)==0){}
   //* PDC  2 Frame
    AT91F_US_SendFrame((AT91PS_USART) AT91C_BASE_DBGU, (char *)PDC1_header,sizeof(PDC1_header),(char *)PDC2_header,sizeof(PDC2_header));
    //* Wait end of frame
    while (AT91F_PDC_IsTxEmpty (AT91C_BASE_PDC_DBGU)==0){}

    AT91F_DBGU_Printk("0)Info\n\r1)Write US\n\r2)Send 1 frame\n\r3)2 smal Frame\n\r4)10 KBytes\n\r5)30 KBytes\n\r6)Time out\r\n");

    //* Init Usart
    Usart_init();
    //* Infinit loop
    while(1)
    {
	if (AT91F_DBGU_Get(&value) == 0 ) menu(value);

    }// End while

}//* End

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -