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

📄 spi.c

📁 tms320lf2407中SPI模块与25AA320(EEPROM)读写程序
💻 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 + -