找回密码
 立即注册

微信扫码登录

查看: 16|回复: 3

[SPI] 请问一下TLSR8258怎样做SPI从机?

[复制链接]

1

主题

4

回帖

13

积分

英勇黄铜

积分
13
QQ
发表于 昨天 12:17 | 显示全部楼层 |阅读模式 来自 中国
Information
说明:   建议参照本版块置顶帖内容输入必要信息
芯片型号: TLSR8258
驱动SDK版本: tc_platform_sdk-V3.3.1
本帖最后由 we_1802397876 于 2026-1-14 14:11 编辑

_attribute_ram_code_sec_noinline_ void irq_handler(void)
{
irq_cnt ++;
unsigned char  irq_status = reg_spi_slave_irq_status;
//An interrupt is triggered after each master spi write or read is completed (CS changes from low to high).
//Note that it is unable to distinguish which condition triggers it.
if(irq_status & FLD_SLAVE_SPI_IRQ)
{
  reg_spi_slave_irq_status = irq_status;
  spi_irq_cnt ++;
  spi_slave_irq_handler();
}
}

volatile unsigned char  buff[SPI_BUFFER_CNT] __attribute__((section(".spi_slave_buff")));
unsigned char slave_buf[SPI_BUFFER_CNT];

void spi_slave_irq_handler(void)
{
/*if(buff[0]==SPI_DATA_HEAD){//Judge whether DataHead is correct.
  slave_rx_length=buff[1];
  if( buff[slave_rx_length-1]==SPI_DATA_END ){//Judge whether DataEnd is correct.
   for(int i=0;i<slave_rx_length;i++){
    if(slave_buf!=buff){//Get data that Master SPI writes to Slave.
     slave_buf=buff;//If Master data has been updated, copy data to slave buff.
    }
   }
  }
}*/
memcpy(slave_buf, (void *)buff, SPI_BUFFER_CNT);
spi_slave_received = 1;
}



怎样才能读数据呢?
slave模式下,中断倒是能触发,CS从低到高时触发一次,但是buff里面什么都没有啊!!!要怎么样才能把数据取出来呢?

1

主题

4

回帖

13

积分

英勇黄铜

积分
13
QQ
 楼主| 发表于 昨天 13:52 | 显示全部楼层 来自 中国
eclipse里面只能看到SPI_V1.0的SPI_Demo。
实际上文件夹里面还有一个SPI_V1.1的SPI_Demo,eclipse里面看不到,里面有app_dma.c,代码更完整。
无标题.png
服了。。。。。。

1

主题

4

回帖

13

积分

英勇黄铜

积分
13
QQ
 楼主| 发表于 昨天 13:56 | 显示全部楼层 来自 中国
本帖最后由 we_1802397876 于 2026-1-14 14:10 编辑

删除C:\Users\oct1158\Downloads\tc_platform_sdk-V3.3.1\demo\vendor\SPI_Demo\SPI_V1.0\SPI_Demo
然后把C:\Users\oct1158\Downloads\tc_platform_sdk-V3.3.1\demo\vendor\SPI_Demo\SPI_V1.1\SPI_Demo导入工程。
1.png

2.png

1

主题

4

回帖

13

积分

英勇黄铜

积分
13
QQ
 楼主| 发表于 昨天 14:25 | 显示全部楼层 来自 中国
但是SPI_V1.1\SPI_Demo里面也只有spi主机的代码,一旦选择#define SPI_DEVICE SPI_SLAVE_DEVICE,就把所有的代码屏蔽完了。
./boot/cstartup_flash.o: In function `start_suspend':
(.vectors+0x212): undefined reference to `irq_handler'
./vendor/SPI_V1.1_Demo/main.o: In function `main':
main.c.text.main+0xe): undefined reference to `user_init'
main.c.text.main+0x12): undefined reference to `main_loop'
make[1]: *** [B85_Driver_Demo.elf] Error 1
make: *** [all] Error 2
"make all" terminated with exit code 2. Build might be incomplete.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Telink forum ( 沪ICP备17008231号-1 |沪公网安备31011502403548号 )

GMT+8, 2026-1-15 16:13 , Processed in 0.098061 second(s), 26 queries .

Powered by Discuz! 隐私政策

泰凌微电子版权所有 © 。保留所有权利。 2024

快速回复 返回顶部 返回列表