资源简介
介绍了如何用vhdl语言实现处理器的spi接口
附所有程序以及说明PDF
代码片段和文件信息
#define SIZE 100
unsigned char SPI_rx_buff[SIZE];
unsigned char SPI_tx_buff[SIZE];
unsigned char rx_wr_indexrx_rd_indexrx_counterrx_buffer_overflow;
unsigned char tx_wr_indextx_rd_indextx_counter;
#pragma interrupt_handler spi_stc_isr:18
void spi_stc_isr(void)
{
SPI_rx_buff[rx_wr_index] = SPDR; //从ISP口读出收到的字节
if (++rx_wr_index == SIZE) rx_wr_index = 0; //放入接收缓冲区,并调整队列指针
if (++rx_counter == SIZE)
{
rx_counter = 0;
rx_buffer_overflow = 1;
}
if (tx_counter) //如果发送缓冲区中有待发的数据
{
--tx_counter;
SPDR = SPI_tx_buff[tx_rd_index]; //发送一个字节数据,并调整指针
if (++tx_rd_index == SIZE) tx_rd_index = 0;
}
}
unsigned char getSPIchar(void)
{
unsigned char data;
while (rx_counter == 0); //无接收数据,等待
data = SPI_rx_buff[rx_rd_index]; //从接收缓冲区取出一个SPI收到的数据
if (++rx_rd_index == SIZE) rx_rd_index = 0; //调整指针
CLI();
--rx_counter;
SEI();
return data;
}
void putSPIchar(char c)
{
while (tx_counter == SIZE);//发送缓冲区满,等待
CLI();
if (tx_counter || ((SPSR & 0x80) == 0))//发送缓冲区已中有待发数据
{ //或SPI正在发送数据时
SPI_tx_buffer[tx_wr_index] = c; //将数据放入发送缓冲区排队
if (++tx_wr_index == SIZE) tx_wr_index = 0; //调整指针
++tx_counter;
}
else
SPDR = c; //发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送
SEI();
}
void spi_init(void)
{
unsigned chat temp;
DDRB |= 0x080; //MISO=input and MOSISCKSS = output
PORTB |= 0x80; //MISO上拉电阻有效
SPCR = 0xD5; //SPI允许,主机模式,MSB,允许SPI中断,极性方式01,1/16系统时钟速率
SPSR = 0x00;
temp = SPSR;
temp = SPDR; //清空SPI,和中断标志,使SPI空闲
}
void main(void)
{
unsigned char I;
CLI(); //关中断
spi_init(); //初始化SPI接口
SEI(); //开中断
while()
{
putSPIchat(i); //发送一个字节
i++;
getSPIchar(); //接收一个字节(第一个字节为空字节)
………
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1567 2008-01-10 12:57 spi_interface\control_led.vhd
文件 125142 2008-01-10 13:00 spi_interface\74hc595.pdf
文件 3668 2008-01-10 15:37 spi_interface\pc104_spi.vhd
文件 1006 2008-01-10 17:01 spi_interface\three_spi.vhd
文件 6428 2007-12-16 18:58 spi_interface\spi93c46\.sopc_builder\install.ptf
目录 0 2007-12-16 18:58 spi_interface\spi93c46\.sopc_builder
文件 12988 2007-12-17 19:58 spi_interface\spi93c46\Block1.bdf
文件 1758 2007-12-17 15:15 spi_interface\spi93c46\clk.bsf
文件 342 2007-12-17 19:58 spi_interface\spi93c46\clk.v
文件 2380 2007-12-16 18:54 spi_interface\spi93c46\db\mux_5kc.tdf
文件 236 2007-12-17 21:10 spi_interface\spi93c46\db\wed.zsf
文件 151 2008-01-10 15:12 spi_interface\spi93c46\db\spi93c46.db_info
文件 149 2008-01-10 15:14 spi_interface\spi93c46\db\spi93c46.sld_design_entry.sci
文件 156 2008-01-10 15:14 spi_interface\spi93c46\db\spi93c46.eco.cdb
目录 0 2007-12-17 21:10 spi_interface\spi93c46\db
文件 242 2007-12-16 19:14 spi_interface\spi93c46\mi.v
文件 6050 2007-12-16 19:15 spi_interface\spi93c46\mi.vwf
文件 237 2007-12-16 18:54 spi_interface\spi93c46\mo.v
文件 5643 2007-12-16 18:45 spi_interface\spi93c46\mo.vwf
文件 2154 2007-12-17 14:59 spi_interface\spi93c46\PushButton_Debouncer.bsf
文件 1537 2007-12-13 16:30 spi_interface\spi93c46\PushButton_Debouncer.v
文件 0 2007-12-16 18:58 spi_interface\spi93c46\sopc_builder_debug_log.txt
文件 7211 2007-12-17 19:58 spi_interface\spi93c46\spi93c46.asm.rpt
文件 7035 2007-12-17 19:57 spi_interface\spi93c46\spi93c46.bsf
文件 300 2007-12-17 15:45 spi_interface\spi93c46\spi93c46.cdf
文件 26 2007-12-17 19:58 spi_interface\spi93c46\spi93c46.done
文件 239 2007-12-17 21:10 spi_interface\spi93c46\spi93c46.dpf
文件 95396 2007-12-17 19:58 spi_interface\spi93c46\spi93c46.fit.rpt
文件 513 2007-12-17 19:58 spi_interface\spi93c46\spi93c46.fit.smsg
文件 491 2007-12-17 19:58 spi_interface\spi93c46\spi93c46.fit.summary
............此处省略109个文件信息
- 上一篇:步态识别gaitgan论文
- 下一篇:QFN系列元器件封装尺寸图
相关资源
- Spire API文档
- The direction of synaptic plasticity mediated
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 八三编码器设计 VHDL代码 简单,包附
- 数字频率合成dds正弦波基于FPGA的DDS产
- 3人表决器 QuartusII
- 六路智能抢答器VHDL语言
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- vhdl与lcd1602实现的多控制电子钟
- 28335写的用spi读取传感器数据并用CA
- STM32F103 CC2500完整驱动(模拟SPI)
- verilog的PCI源代码,非常详细,顶层模
- 手机短信api接口(源代码)
- ASK调制与解调VHDL程序及仿真
- 红外循迹小车VHDL程序
- VHDL学习及实例(100个例子)
- VHDL 7人表决器
- VHDL语言编写的100实用的例程
- VHDL写的四人抢答器
- lcd12864的VHDL程序
- cs5530的SPI程序
- 9s12单片机SPI功能代码
- 基于VHDL的交通灯控制器设计
- stm32 用SPI 方式读写 SDHC
- VHDL带分频功能的函数发生器实现六种
- SPI Master 的Verilog源代码
- Spire.Doc 破解版
- Spin-1目标的广义parton分布的多项式和
- 介子和S波氘核的四极矩以及对spin-1系
- 基于SPCE061A和PTR8000的模拟SPI总线通信
评论
共有 条评论