📄 main.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
//*
//*----------------------------------------------------------------------------
#include <stdio.h>
#include "AT91RM9200.h"
#define AT91DKC_SDRAM_BASE_ADDRESS (( char *)(0x20100000))
#define BLOCK_SIZE (1024 * 10)
//* External Function Prototype
extern void AT91F_DBGU_Printk(char *);
extern unsigned int AT91F_DBGU_Get( char *val);
extern void Usart_init (void);
extern void AT91F_US_Printk( char *buffer); // \arg pointer to a string ending by \0
extern void AT91F_US_Print_frame(char *buffer, unsigned short counter); // \arg pointer to a string ending by \0
extern void AT91F_US_Print_2_frame(char *buffer, unsigned short counter,char *buffer2,unsigned short counter2); // \arg pointer to a string ending by \0
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_US1_CSR 0x%08X \n\r",(unsigned int) *AT91C_US1_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 US1\n\r",sizeof("Write in US1\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 US1\n\r",sizeof("Send Frame US1\n\r"),0,0);
AT91F_US_Print_frame("Send Frame US1\n\r",sizeof("Send Frame US1\n\r"));
break;
case '3': //* Print in PDC
//* PDC 1 Frame
AT91F_US_SendFrame((AT91PS_USART) AT91C_BASE_DBGU,
"Send Frame US1\n\r",sizeof("Send Frame US1\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_SDRAM_BASE_ADDRESS;
sprintf((char*) message,"init Block :0X%08X\n\r",pt_char);
AT91F_DBGU_Printk((char*)message);
for (i=0; i < BLOCK_SIZE;i++)
{
*pt_char='0';
pt_char++;
}
pt_char = AT91DKC_SDRAM_BASE_ADDRESS;
AT91F_DBGU_Printk("send \n\r");
sprintf((char*) message,"send from 0X%08X 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_SDRAM_BASE_ADDRESS;
sprintf((char*) message,"init Block :0X%08X\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_SDRAM_BASE_ADDRESS;
AT91F_DBGU_Printk("send 120K bytes on USART 1 \n\r");
//* for transfert 124 K byte In first transfert (64Kbyte - 1 ) PDC max size end next at: 60 Kbyte +1
AT91F_US_Print_2_frame( AT91DKC_SDRAM_BASE_ADDRESS,(64*1024)-1,AT91DKC_SDRAM_BASE_ADDRESS+(64*1024)-1,(60*1024)+1);
break;
default:
AT91F_DBGU_Printk("\n\r");
break;
}
}
//*----------------------------------------------------------------------------
//* Function Name : main
//* Object : Main interrupt function
//* Input Parameters : none
//* Output Parameters : TRUE
//*----------------------------------------------------------------------------
int Main( void )
//* Begin
{
char value;
//* 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 US1 \n\r2) Send 1 frame\n\r3) 2 littel Frame\n\r4) 10 K Bytes\n\r5) 120s K Bytes\n\r");
//* Init Usart
Usart_init();
//* Infinit loop
while(1)
{
if (AT91F_DBGU_Get(&value) == 0 ) menu(value);
}
//* End
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -