📄 spi.c
字号:
#include "2407.h"
#include "SPI.h"
#define Spi_Int 1
unsigned char t_data=0x55;
unsigned char r_data[10];
unsigned int rev_data;
unsigned int w_intr[10];
unsigned int r_intr[10];
unsigned int *w_ptr;
unsigned int *r_ptr;
unsigned int write_flg = 0;
unsigned int read_flg = 0;
unsigned int wenable_flg = 0;
void data_init();
void delay();
void main()
{
unsigned int i=0;
DINT;
SystemInit();
data_init();
SpiInit();
EINT;
wenable_flg = 1;
*SPITXBUF = 0x0600; //写使能指令
while(wenable_flg);
delay();
write_flg = 1;
*SPITXBUF = 0x0200; //写指令
*SPITXBUF = 0x0000; //地址高8位
while(write_flg);
delay();
read_flg = 1;
*SPITXBUF = 0x0300; //读指令
*SPITXBUF = 0x0000; //地址高8位
while(read_flg);
for(;;){
}
}
void data_init(void)
{
w_intr[0] = 0x0400; //地址低8位
w_intr[1] = 0x1100; //写入的数据
r_intr[0] = 0x0400; //地址低8位
r_intr[1] = 0x5500; //伪数据
w_ptr = w_intr;
r_ptr = r_intr;
}
void SystemInit(void)
{
WSGR = 0;
*IMR = 0x01;
*WDCR = 0x68;
*SCSR1 = 0x0020;
}
void SpiInit(void)
{
*MCRB = 0x3c; //设置引脚为SPI引脚
*SPICCR = 0x07; //发送8个BIT
*SPICTL = 0x1f; //主工作方式
*SPIBRR = 0x4f; //波特率
*SPIPRI = 0x00; //低优先级
*SPICCR = 0x87; //进入准备状态
}
interrupt void PHANTOM(void)
{
}
interrupt void c_int1(void)
{
unsigned int data;
if((*PIVR & 0x05) == 0x05)
{
if(wenable_flg){
wenable_flg = 0;
}
if(write_flg){
if (w_ptr < (w_intr+2)){
*SPITXBUF = *w_ptr++;
}else{
w_ptr = w_intr;
write_flg = 0;
}
}
if(read_flg){
if (r_ptr < (r_intr+2)){
r_data[r_ptr-r_intr] = *SPIRXBUF;
*SPITXBUF = *r_ptr++;
}else{
r_data[r_ptr-r_intr] = *SPIRXBUF;
r_ptr = r_intr;
read_flg = 0;
}
}
}
rev_data = *SPIRXBUF;
EINT;
}
void delay()
{
long int i;
for (i=0; i<20000; i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -