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

📄 wakeuptimer.c

📁 ADuC7020/26是ADI模拟公司开发的ARM7TDMI内核
💻 C
字号:
/*********************************************************************

 Author        : ADI - Apps            www.analog.com/MicroConverter

 Date          : Sept. 2005

 File          : WakeUpTimer.c

 Hardware      : Applicable to ADuC702x rev H or I silicon
                 Currently targetting ADuC7026.

 Description   : Wake-up Timer causes part to power-up, perform an Analog 
 				 to Digital Conversion, output conversion via UART at 9600bps 
				 and power-down again, once every minute. 

				 the debugger cannot be used when the part is placed in power down mode.

		
*********************************************************************/

#include <ADuC7026.h>

void IRQ_Handler(void) __irq;
void senddata(short);
void ADCpoweron(int);
char hex2ascii(char);

int main(void)
{
	GP4DAT = 0x04000000;			//	Configure P4.2 as output
	GP4DAT ^= 0x00040000;			// Compliment P4.2 	
		
	// Setup tx & rx pins on P1.0 and P1.1
	GP1CON = 0x011;
	
	// Start setting up UART
	COMCON0 = 0x80;				// Setting DLAB
	COMDIV0 = 0x88;				// 
   	COMDIV1 = 0x00;
   	COMCON0 = 0x07;				// Clearing DLAB


	T2CON = 0xE8;					// Configures Timer2 to count down, with 
									// "Hr:Min:Sec:Hundredths" format and prescalar of 256

	T2LD = 0x00010000;				// Sets the counter register to 5 minutes. Format: HH:MM:SS:hh
	

	IRQEN = WAKEUP_TIMER_BIT;				//	Enable ADC IRQ ( 0x10 )


	// Powering Down Device	
/*	POWKEY1 = 0x01;
	POWCON = 0x30;
	POWKEY2 = 0xF4;
*/	
	return 0;
}


/********************************************************************/
/*                                                                  */
/*		Interrupt Service Rountine									*/
/*                                                                  */
/********************************************************************/

void IRQ_Handler() __irq
{
	int t;

	GP4DAT ^= 0x00040000;			// Compliment P4.2 each time an interrupt 
									// occurs (light on during conversion)	
	
	//ADC configuration
	ADCpoweron(20000);				// power on ADC										
	REFCON = 0x01;					// connect internal 2.5V reference to VREF pin
	ADCCP  = 0x00;				    // Selecting ADC Channel 0	
	ADCCON = 0x4E3;					// Perform single software conversion (AC Speed = 1 MSPS)
	
	while (!ADCSTA){}			// wait for end of conversion
		senddata(ADCDAT >> 16); // Output Conversion

	ADCCON = 0x00;					// Powers Down ADC

	t = 5000;					 // Delay required to send data via UART
	while(t>0)
	{
		t--;
	}

	GP4DAT ^= 0x00040000;			// Complement P4.2 at end of conversion (switches off)

	T2CLRI = 0xFF;	  // Clearing Timer2 Interrupt

	// Powering Down Device	
/*	POWKEY1 = 0x01;
	POWCON = 0x30;
	POWKEY2 = 0xF4;
*/
	return;
}





void ADCpoweron(int time)
{
	ADCCON = 0x20;	 					// power-on the ADC
	while (time >=0)	  				// wait for ADC to be fully powered on
    time--;
}


void senddata(short to_send)
{
	while(!(0x020==(COMSTA0 & 0x020))){}
		COMTX = 0x0A;						// output LF 
	while(!(0x020==(COMSTA0 & 0x020))){}
		COMTX = 0x0D;						// output CR 
	while(!(0x020==(COMSTA0 & 0x020))){}
		COMTX = hex2ascii ((to_send >> 8) & 0x0F);
	while(!(0x020==(COMSTA0 & 0x020))){}
		COMTX = hex2ascii ((to_send >> 4) & 0x0F);						
	while(!(0x020==(COMSTA0 & 0x020))){}
		COMTX = hex2ascii (to_send & 0x0F);	
}



char hex2ascii(char toconv)
{
	if (toconv<0x0A) 
	{
		toconv += 0x30;
	}
	else 
	{
		toconv += 0x37;
	}	
	return (toconv);
}

⌨️ 快捷键说明

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