【DSP学习】【SCI模块配置-FIFO功能】【28377S】

1,初始化SCI

void init_SCIA(){

//	Setup Pin Options
   GPIO_SetupPinMux(8, GPIO_MUX_CPU1, 6);
   GPIO_SetupPinOptions(8, GPIO_INPUT, GPIO_PUSHPULL);
   GPIO_SetupPinMux(9, GPIO_MUX_CPU1, 6);
   GPIO_SetupPinOptions(9, GPIO_OUTPUT, GPIO_ASYNC);


   // Setup SCIA  Baud
   // @LSPCLK = 50 MHz (200 MHz SYSCLK)
   //[HBAUD高位波特率设置寄存器]+[LBAUD低位]=[LSPCLK低速外设时钟]/[BAUD波特率]/8

//	    SciaRegs.SCIHBAUD.all = 0x0002;
//	    SciaRegs.SCILBAUD.all = 0x008B;//b=9600

//	    SciaRegs.SCIHBAUD.all = 0x01;
//	    SciaRegs.SCILBAUD.all = 0x45;//波特率19200

//	    SciaRegs.SCIHBAUD.all = 0x00;
//	    SciaRegs.SCILBAUD.all = 0xA3;//波特率38400

//   Setup SCIA_REGS
   SciaRegs.SCIHBAUD.all = 0x00;
   SciaRegs.SCILBAUD.all = 0x36;//b=115200

   SciaRegs.SCICCR.bit.SCICHAR=7;//8位数据位

   SciaRegs.SCICTL1.bit.RXENA=1;//接收使能
   SciaRegs.SCICTL1.bit.TXENA=1;//发送使能
   SciaRegs.SCICTL1.bit.SWRESET=1;//重启

   SciaRegs.SCIFFTX.bit.SCIFFENA=1;//FIFO功能使能

}

 

 

2,SCI寄存器定义

b2a203552b204509a93748985df61c41.png

9ca4d21f63c948b6bfe2cc248b4f3212.png

2afb70834d154ac49d7bb424c6b5b717.png

8dd50e9b0cc944659a277a230b2cbeeb.png

e9072f926fff47c5a113148766fbf9cf.png

3,测试SciFifo功能

//该段代码放置在定时器中断,每31.25ms执行一次
//PC使用串口调试工具,硬件连接好PC与dsp
//如pc无发送,则会接收到0XAB
//如PC发送,DSP会返回0XAB+DSP发送内容
//PC一次性最多发16*2个字节,超过时,dsp只能接收到最后发的16*2个字节

		SciaRegs.SCITXBUF.all=0xAB;
//		SciaRegs.SCITXBUF.all=0xCD;

		for(i=1;1<20;i++)
		{
			if(SciaRegs.SCIFFRX.bit.RXFFST>=1)
			{
				SciaRegs.SCITXBUF.all=SciaRegs.SCIRXBUF.all;
			}
			else{
				break;
			}
		}

//end
//该段代码放置在定时器中断,每31.25ms执行一次
//PC使用串口调试工具,硬件连接好PC与dsp
//如pc无发送,则会接收到0XAB
//如PC发送,DSP会返回0XAB+DSP发送内容
//PC一次性最多发16*2个字节,超过时,dsp只能接收到最后发的16*2个字节

 

 

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
AXI4-Stream FIFO的`s_axi_awready`信号需要在AXI接口的主设备和从设备之间协商来控制,以确保数据能够正确地传输。要拉高`s_axi_awready`信号,需要满足以下条件: 1. 主设备(例如CPU)发出AXI写请求(`s_axi_awvalid`为高电平)。 2. 从设备(例如AXI4-Stream FIFO)准备好接受写数据,即FIFO的剩余空间足够,同时也需要考虑FIFO的输出(如果有的话)是否占用了FIFO的空间。 3. 从设备将`s_axi_awready`信号拉高,表示准备好接受数据。 如果从设备没有准备好接收数据,则从设备将`s_axi_awready`保持低电平,主设备将继续等待设备准备好。 在FIFO的实现中,可以使用一个计数器来跟踪FIFO中的剩余空间,以便决定何时准备好接收新的写入数据。当FIFO满时,`s_axi_awready`将保持低电平,直到FIFO中有数据被读取并腾出空间。 下面是一个示例代码片段,其中展示了如何使用计数器来控制`s_axi_awready`信号: ```vhdl -- FIFO深度计数器 signal count : integer range 0 to MAX_DEPTH-1 := 0; -- 当FIFO有空间时,准备接收新的写入数据 if (s_axi_awvalid = '1' and count < MAX_DEPTH and not fifo_full) then s_axi_awready <= '1'; else s_axi_awready <= '0'; end if; -- 当FIFO有数据时,准备输出 if (s_axis_tready = '1' and count > 0) then s_axis_tvalid <= '1'; else s_axis_tvalid <= '0'; end if; -- 当FIFO有空间时,准备接收新的写入数据 if (s_axi_awvalid = '1' and count < MAX_DEPTH and not fifo_full) then -- 将写入数据存储到FIFOfifo_mem(count) <= s_axi_wdata; -- 计数器加1 count <= count + 1; -- 响应写请求 s_axi_bvalid <= '1'; else -- 响应写请求 s_axi_bvalid <= '0'; end if; ``` 在上面的代码中,`fifo_full`是一个标志,用于指示FIFO是否已满。如果FIFO已满,则不会接受新的写入数据,并且`s_axi_awready`将保持低电平,直到FIFO中有数据被读取并腾出空间。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值