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

📄 main.c

📁 基于AT91RM9200为核心的ARM开发板的RTC8025计时器的驱动程序 该程序在ADS环境下运行
💻 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              : Basic twi example. Write a byte into EEPROM and read it
//* Creation            : NL   25/11/02
//* 1.1 31/03/03 JPP	: Add DBGU message 
//*----------------------------------------------------------------------------
#include "main.h"
#include "twi.h"
#include <stdio.h>

void Delay(int i)
{	int a,b;
	for(a=0;a<1000;a++)
		for(b=0;b<i;b++);
}
//*=========================================================
//*		INIT
//*=========================================================
//*----------------------------------------------------------------------------
//* \fn    AT91F_SetTwiClock
//* \brief Initialization
//*----------------------------------------------------------------------------
void AT91F_SetTwiClock(const AT91PS_TWI pTwi)
{
	int sclock;

	/* Here, CKDIV = 1 and CHDIV=CLDIV  ==> CLDIV = CHDIV = 1/4*((Fmclk/FTWI) -6)*/

	sclock = (10*AT91C_MASTER_CLOCK /AT91C_TWI_CLOCK);
	if (sclock % 10 >= 5)
		sclock = (sclock /10) - 5;
	else
		sclock = (sclock /10)- 6;
	sclock = (sclock + (4 - sclock %4)) >> 2;	// div 4

    pTwi->TWI_CWGR	= 0x00010000 | sclock | (sclock << 8);
}


int main()
{
	int loop;
	
	unsigned char write=0, read=0;
	unsigned char seconds,minutes,hours,weekdays,days,months,years;
	char tmp[16];
	char buffer[256];
	
	AT91F_DBGU_Printk("\n\n\r======================================");
	AT91F_DBGU_Printk("\n\rAT91RM9200 TWI RTC Test\n\r");
	AT91F_DBGU_Printk("======================================\n\r");
	
	// Configure TWI PIOs
	AT91F_PIO_Enable(AT91C_BASE_PIOA, (unsigned int) AT91C_PA25_TWD|AT91C_PA26_TWCK);
	
	AT91F_PIO_CfgPullup(AT91C_BASE_PIOA, (unsigned int) AT91C_PA25_TWD|AT91C_PA26_TWCK);
	//*AT91C_PIOA_PPUER=(unsigned int) AT91C_PA25_TWD|AT91C_PA26_TWCK;
	AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA, (unsigned int) AT91C_PA25_TWD);
	
	AT91F_PIO_Disable(AT91C_BASE_PIOA, (unsigned int) AT91C_PA25_TWD|AT91C_PA26_TWCK);
	
	AT91F_TWI_CfgPIO ();
	// Configure PMC by enabling TWI clock
	AT91F_TWI_CfgPMC ();
	
	// Configure TWI in master mode
	AT91F_TWI_Configure (AT91C_BASE_TWI);
		
	// Set TWI Clock Waveform Generator Register	
	AT91F_SetTwiClock(AT91C_BASE_TWI);

	AT91F_DBGU_Printk("TWI ready\n\r");

	

	// Write a byte and read it 
		/*
		write = 0x34;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0xE0, (char *)&write, 1);//control 1
		write = 0x28;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0xf0, (char *)&write, 1);//control 2
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x00, (char *)&write, 1);//second
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x10, (char *)&write, 1);//minute
		write = 0x13;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x20, (char *)&write, 1);//hour
		write = 0x02;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x30, (char *)&write, 1);//weekday
		write = 0x29;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x40, (char *)&write, 1);//dat
		write = 0x08;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x50, (char *)&write, 1);//month
		write = 0x06;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x60, (char *)&write, 1);//year
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x70, (char *)&write, 1);//digital offset
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x80, (char *)&write, 1);//Alarm W minute
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0x90, (char *)&write, 1);//Alarm W hour
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0xa0, (char *)&write, 1);//Alarm W weekday
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0xb0, (char *)&write, 1);//Alarm D minute	
		write = 0x00;
		AT91F_TWI_Write(AT91C_BASE_TWI, 0xc0, (char *)&write, 1);//Alarm W hour
		*/
		/*
		tmp[0]=0x00;
		tmp[1]=0x00;
		tmp[2]=0x20;
		tmp[3]=0x00;
		tmp[4]=0x00;
		tmp[5]=0x00;
		tmp[6]=0x00;
		tmp[7]=0x00;
		tmp[8]=0x00;
		tmp[9]=0x00;
		tmp[10]=0x00;
		tmp[11]=0x00;
		tmp[12]=0x00;
		tmp[13]=0x00;
		tmp[14]=0x34;
		tmp[15]=0x28;
	AT91F_TWI_Write(AT91C_BASE_TWI, 0x00, (char *)tmp, 16);*/
	Delay(1000);
	while(1)
	{
		//AT91F_TWI_Read(AT91C_BASE_TWI, 0x24, (char *)&hours, 1);
		
		//AT91F_TWI_Read(AT91C_BASE_TWI, 0x14, (char *)&minutes, 1);
				
		//AT91F_TWI_Read(AT91C_BASE_TWI, 0x04, (char *)&seconds, 1);
		
		AT91F_TWI_Read(AT91C_BASE_TWI, 0x00, (char *)tmp, 16);
		
		sprintf(buffer,"Time:%xy%xm%xd   %x:%x:%x\n\r",tmp[6],tmp[5],tmp[4],tmp[2],tmp[1],tmp[0]);
	
		AT91F_DBGU_Printk(buffer);
	Delay(100);
	}
	while (1);	
}

⌨️ 快捷键说明

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