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

📄 68k_spi.c

📁 uCOSII在motorala单片机上的移植
💻 C
字号:
#include "68k_spi.h"
/*
**************************************************************************************************
* Discription:	
* Arguments:
* Returns:
* Notes:		
**************************************************************************************************
*/
void initSPI(void)
{
	// SCK is enabled when SPE bit in SPCR1 is set, pin's function configured for SPI; 
	*PQSPAR |= BM_PQSPA0|BM_PQSPA1|BM_PQSPA3
		|BM_PQSPA4|BM_PQSPA5|BM_PQSPA6;	
	*PORTQS |= BM_PQS3|BM_PQS4|BM_PQS5|BM_PQS6;
	*PORTQS &= ~BM_PQS2; 
	*DDRQS |= BM_DDQS1|BM_DDQS3
		|BM_DDQS4|BM_DDQS5|BM_DDQS6;		
	*DDRQS &= ~BM_DDQS0;						
	// CAUTION: bits per transfer(BITS[3:0]) and serial clock baud rate(SPBR[7:0]) 
	// are default value, which means that 8 bits per transfer and one eighth of the 
	// system frequency baud rate is applied;
	*QSM_SPCR0 |= (BM_MSTR|BM_CPHA);
	*QSM_SPCR0 &= ~(BM_WOMQ|BM_CPOL);
	// CAUTION: end queue pointer(ENDQP[3:0]) and new queue pointer(NEWQP[3:0])
	// are default value, which must be set when using SPI.
	*QSM_SPCR2 &= ~(BM_SPIFIE|BM_WREN);	
	//
	*QSM_SPCR3 &= ~(BM_LOOPQ|BM_HMIE|BM_HALT);
	// CAUTION:delay before SCK(DSCKL[6:0]) and length of delay after 
	// transfer(DTL[7:0]) are default value, which means one half the SCK period 
	// and 128/Fsys are applied. look for peripheral device datasheet for delay before
	// SCK value. in AT45DB642, Tcss of 250ns is the required parameter.
	*QSM_SPCR1 &= ~BM_SPE;	// disable SPI function; 		
	
	return;
}
/*
**************************************************************************************************
* Discription:	
* Arguments:
* Returns:
* Notes:		value of spbr among 2 to 255 can be used when calling this function,
*			while 0 or 1 will disable the baud rate generator.
**************************************************************************************************
*/
void setSPIBaudRate(INT8U spbr)
{
	INT16U value = 0x0000;
	
	value |= (INT16U)spbr; 
	*QSM_SPCR0 |= value;
	
	return;
}
/*
**************************************************************************************************
* Discription:	
* Arguments:
* Returns:
* Notes:		value of newqp among 0x00 to 0x0F can be used when calling this 
*			function.
**************************************************************************************************
*/
void setNewQueuePointer(INT8U newqp)
{
	INT16U value = 0x0000;
	
	value |= (INT16U)newqp;
	*QSM_SPCR2 |= value;
	
	return;
}
/*
**************************************************************************************************
* Discription:	
* Arguments:
* Returns:
* Notes:		value of endqp among 0x00 to 0x0F can be used when calling this 
*			function.
**************************************************************************************************
*/
void setEndQueuePointer(INT8U endqp)
{
	INT16U value = 0x0000;
	
	value |= (INT16U)endqp;
	value <<= 8;
	*QSM_SPCR2 |= value;
	
	return;
}

⌨️ 快捷键说明

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