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

📄 init.c

📁 rs485的通信程序的主程序。采用at91sam7a3芯片编写的。
💻 C
字号:
#include "at91sam7a3.h"


extern	unsigned long	Abus_flag;
extern	unsigned long	Bbus_flag;
extern 	unsigned long	UART1_RE_flag;
extern	unsigned long	UART2_RE_flag;
extern 	unsigned long	TX_BUS_flag;

		unsigned long	RE_Data[522];
		unsigned int	RE_Count ;


void	power_on_initialization(void);
void	Initial_USART(void);
void	SYS_Init(void);
extern	void UART0(void) __irq ;
extern	void UART1(void) __irq ;
extern	void UART2(void) __irq ;


void  power_on_initialization(void)
{ 
	SYS_Init();

}



void SYS_Init(void)
{
	int i;

	AT91PS_PIO  pPIOA  , pPIOB;
	AT91PS_PMC pPMC;
    AT91PS_RSTC pRSTC;
    AT91PS_PITC pPITC;
    AT91PS_RTTC pRTTC;
	AT91PS_SHDWC pSHDWC;
    AT91PS_WDTC	 pWDTC;
	AT91PS_AIC pAIC;
	AT91PS_MC pMC;
	AT91S_USART *pIntial_US0,*pIntial_US1,*pIntial_US2;


  	pAIC=AT91C_BASE_AIC;
	pAIC->AIC_SMR[6] = 0x00000005;	//65;		//中断源模式寄存器
	pAIC->AIC_SMR[7] = 0x00000004;
	pAIC->AIC_SMR[8] = 0x00000004;
	pAIC-> AIC_SVR[6] = (unsigned long) UART0  ;   		// Source Vector Register
	pAIC-> AIC_SVR[7] = (unsigned long) UART1   ; // Source Vector Register
	pAIC-> AIC_SVR[8] = (unsigned long) UART2  ;		// Source Vector Register
	pAIC->AIC_IECR = 0x000000c0; 	// Interrupt Enable Command Register
	pAIC->AIC_IDCR = 0xfffffe3f; 	// Interrupt Disable Command Register
	pAIC->AIC_ICCR = 0xffffffff; 	// Interrupt Clear Command Register
	pAIC->AIC_ISCR = 0x00000000; 	// Interrupt Set Command Register
	pAIC->AIC_EOICR = 0xffffffff; 	// End of Interrupt Command Register
	pAIC->AIC_DCR = 0x00000000; 	// Debug Control Register (Protect)
	pAIC->AIC_FFER = 0x00000000; 	// Fast Forcing Enable Register
	pAIC->AIC_FFDR = 0xffffffff; 	// Fast Forcing Disable Register

	
  	pPMC=AT91C_BASE_PMC;
	pPMC->PMC_SCER = 0x00000001; 	// System Clock Enable Register
	pPMC->PMC_SCDR = 0x00000f80; 	// System Clock Disable Register
	pPMC->PMC_MOR = 0x00000601; 	// Main Oscillator Register
	pPMC->PMC_PLLR = 0x10090f0a; 	// PLL Register
	pPMC->PMC_MCKR = 0x00000001; 	// Master Clock Register
	pPMC->PMC_IER = 0x00000000; 	// Interrupt Enable Register
	pPMC->PMC_IDR = 0x0000070d; 	// Interrupt Disable Register


//USART **********************
	pIntial_US0 = AT91C_BASE_US0;	//0xFFFC0000;
	pIntial_US1 = AT91C_BASE_US1;	//0xFFFC4000;
	pIntial_US2 = AT91C_BASE_US2;	//0xFFFC8000;

	pIntial_US0->US_CR = 0x0000000C;
	pIntial_US1->US_CR = 0x0000000C;
	pIntial_US2->US_CR = 0x0000000C;

	pIntial_US0->US_CR = 0x00000100;
	pIntial_US1->US_CR = 0x00000100;
	pIntial_US2->US_CR = 0x00000100;

	pIntial_US0->US_MR = 0x001008C0;
	pIntial_US1->US_MR = 0x00100CC1;	//pIntial_US1->US_MR = 0x00120CC1;
	pIntial_US2->US_MR = 0x00100CC1;


	pIntial_US0->US_BRGR = 0x00000006;		//20070523
	pIntial_US1->US_BRGR = 0x0000000C;
	pIntial_US2->US_BRGR = 0x0000000C;

	pIntial_US0->US_CR = 0x00000050;
	pIntial_US1->US_CR = 0x00080050;
	pIntial_US2->US_CR = 0x00080050;

	pPMC->PMC_PCER = 0xf00001cc; 	// Peripheral Clock Enable Register
	pPMC->PMC_PCDR = 0x0ffffe30; 	// Peripheral Clock Disable Register

	pIntial_US0->US_IER = 0x00000001;	//0x0000181B;
	pIntial_US1->US_IER = 0x00000001;	//0x0000181B;
	pIntial_US2->US_IER = 0x00000001;	//0x0000181B;

	pIntial_US0->US_IDR = 0x000F3FFC;
	pIntial_US1->US_IDR = 0x000F3FFE;
	pIntial_US2->US_IDR = 0x000F3FFE;

	pIntial_US1->US_RTOR = 0x00000000;
	pIntial_US2->US_RTOR = 0x00000000;
	pIntial_US1->US_TTGR = 0x00000002;
	pIntial_US2->US_TTGR = 0x00000002;
	pIntial_US1->US_FIDI = 0x00000000;
	pIntial_US2->US_FIDI = 0x00000000;

	pIntial_US0->US_PTCR = 0x00000101;
	pIntial_US1->US_PTCR = 0x00000101;
	pIntial_US2->US_PTCR = 0x00000101;

	for (i=0;i<300;i++);
//******************************

    pPIOA=AT91C_BASE_PIOA;
	pPIOA->PIO_PER = 0xfffff873; 	// PIO Enable Register
	pPIOA->PIO_PDR = 0x0000078c; 	// PIO Disable Register
	pPIOA->PIO_ODR = 0xfffffff7; 	// Output Disable Registerr
	pPIOA->PIO_IFDR = 0xffffffff; 	// Input Filter Disable Register
	pPIOA->PIO_IDR = 0xffffffff; 	// Interrupt Disable Register
	pPIOA->PIO_MDDR = 0xffffffff; 	// Multi-driver Disable Register
	pPIOA->PIO_PPUER = 0xfffffaf3;	//873; 	// Pull-up Enable Register
	pPIOA->PIO_ASR = 0x0000078c; 	// Select A Register
	pPIOA->PIO_BSR = 0x00000000; 	// Select B Register
	pPIOA->PIO_OWDR = 0xffffffff; 	// Output Write Disable Register

    pPIOB=AT91C_BASE_PIOB;
	pPIOB->PIO_PER = 0xf6ffffff; 	// PIO Enable Register
	pPIOB->PIO_PDR = 0xf9ffffff; 	// PIO Enable Register
	pPIOB->PIO_ODR = 0xffffffff; 	// Output Disable Registerr
	pPIOB->PIO_IFDR = 0xffffffff; 	// Input Filter Disable Register
	pPIOB->PIO_IDR = 0xfFffffff; 	// Interrupt Disable Register
	pPIOB->PIO_MDDR = 0xffffffff; 	// Multi-driver Disable Register
	pPIOB->PIO_PPUER = 0xffffffff; 	// Pull-up Enable Register
	pPIOB->PIO_OWDR = 0xffffffff; 	// Output Write Disable Register
	pPIOB->PIO_BSR = 0x09000000; 	// Select B Register


    pRSTC=AT91C_BASE_RSTC;
	pRSTC->RSTC_RCR = 0xa5000000; 	// Reset Control Register
	pRSTC->RSTC_RMR = 0xa5000710; 	// Reset Mode Register

	pPITC=AT91C_BASE_PITC;
	pPITC->PITC_PIMR = 0x000fffff; 	// Period Interval Mode Register

	pRTTC=AT91C_BASE_RTTC;
	pRTTC->RTTC_RTMR = 0x00000000; 	// Real-time Mode Register

	pSHDWC=AT91C_BASE_SHDWC;
	pSHDWC->SHDWC_SHCR = 0xa5000000; 	// Shut Down Control Register
	pSHDWC->SHDWC_SHMR = 0x00000303; 	// Shut Down Mode Register

	pWDTC=AT91C_BASE_WDTC;
	pWDTC->WDTC_WDCR = 0xa5000000; 	// Watchdog Control Register
	pWDTC->WDTC_WDMR = 0x3fff8fff; 	// Watchdog Mode Register

	pMC=AT91C_BASE_MC;
	pMC->MC_RCR = 0x00000000; 	// MC Remap Control Register
	pMC->MC_FMR = 0x00320100; 	// MC Flash Mode Register
	pMC->MC_FCR = 0x5a000000; 	// MC Flash Command Register

//flag define and initial
	Abus_flag = 0x55555555;			//BUS A on
	Bbus_flag = 0xaaaaaaaa;			//BUS B off
	UART1_RE_flag = 0xaaaaaaaa;
	UART2_RE_flag = 0xaaaaaaaa;
	TX_BUS_flag = 0x55555555;

	
}

⌨️ 快捷键说明

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