📄 68k_spi.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 + -