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

📄 main.c

📁 arm启动代码
💻 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            : ODi   11/18/2002
//*
//*----------------------------------------------------------------------------
#include "lib_arm920t.h"
#include "AT91RM9200.h"
#include "lib_AT91RM9200.h"

// The following function is defined in init.c
extern void AT91F_DBGU_Printk(char *buffer);
// The following DBGU ASM handler is defined in asm_isr.s
extern void AT91F_ASM_DBGU_Handler(void);

#define RUNNING              0
#define GO_TO_IDLE_MODE_PMC  1
#define GO_TO_IDLE_MODE_CP15 2
char state = RUNNING;

//*----------------------------------------------------------------------------
//* \fn    AT91F_DBGU_Handler
//* \brief This function is invoked by AT91F_ASM_DBGU_Handler
//* This function is for demonstration purpose only
//*----------------------------------------------------------------------------
void AT91F_DBGU_Handler(void)
{
	unsigned int csr = (((AT91PS_USART)AT91C_BASE_DBGU)->US_CSR & ((AT91PS_USART)AT91C_BASE_DBGU)->US_IMR);
	if (csr & AT91C_US_RXRDY) {
		switch (AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU)) {
		case 'p':
		case 'P': state = GO_TO_IDLE_MODE_PMC;  break;
		case 'c':
		case 'C': state = GO_TO_IDLE_MODE_CP15; break;
		default : state = RUNNING;           	break;
		}
	}
	else {
		AT91F_DBGU_Printk("-E- DBGU error\n\r");
	}
}

//*----------------------------------------------------------------------------
//* \fn    main
//* \brief 
//* 
//*----------------------------------------------------------------------------
int main()
{
	unsigned int tick = *(AT91C_ST_CRTR);
	AT91F_DBGU_Printk("\n\n\r-I- ======================================\n\r");
	AT91F_DBGU_Printk("-I- AT91RM9200 idle mode example\n\r");
	AT91F_DBGU_Printk("-I- --------------------------------------\n\r");
	AT91F_DBGU_Printk("-I- Hit P to enter in idle mode using PMC\n\r");
	AT91F_DBGU_Printk("-I- Hit C to enter in idle mode using CP15\n\r");
	AT91F_DBGU_Printk("-I- Hit another key to exit idle mode\n\r");
	AT91F_DBGU_Printk("-I- ======================================\n\r");
	
	// Enable interrupt to get one IT each time a character is entered
	AT91F_AIC_ConfigureIt (
		AT91C_BASE_AIC,                        // AIC base address
		AT91C_ID_SYS,                         // System peripheral ID
		AT91C_AIC_PRIOR_HIGHEST,               // Max priority
		AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, // Level sensitive
		AT91F_ASM_DBGU_Handler );
	AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);
	AT91F_US_EnableIt((AT91PS_USART) AT91C_BASE_DBGU, (AT91C_US_RXRDY | AT91C_US_OVRE | AT91C_US_FRAME | AT91C_US_PARE));
	AT91F_US_EnableRx((AT91PS_USART) AT91C_BASE_DBGU);

	// Print a 'C' character each second
	tick = *(AT91C_ST_CRTR);
	while (1) {
		// User ask to move in Idle mode configuring PMC
		if (state == GO_TO_IDLE_MODE_PMC) {
			AT91F_DBGU_Printk("\n\r-I- Enter in Idle mode using PMC\n\r");
			AT91C_BASE_PMC->PMC_SCDR = AT91C_PMC_PCK;
			AT91F_DBGU_Printk("-I- Interrupt received, exit Idle mode\n\r");
		}
		// User ask to mode in  Idle mode configuring CP15
		else if (state == GO_TO_IDLE_MODE_CP15) {
			AT91F_DBGU_Printk("\n\r-I- Enter in Idle mode using CP15\n\r");
			AT91F_ARM_WaitForInterrupt();
			AT91F_DBGU_Printk("-I- Interrupt received, exit Idle mode\n\r");
		}
		// Send each second a character (in RUNNING mode)
		else if (tick != *(AT91C_ST_CRTR)) {
			AT91F_DBGU_Printk("R");
			tick = *(AT91C_ST_CRTR);
		}
	}		
}

⌨️ 快捷键说明

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