hgj19890929

hgj19890929

0个粉丝

4

问答

0

专栏

0

资料

hgj19890929  发布于  2017-11-23 13:47:35
采纳率 0%
4个问答
3204

【3518ev200】如何将SPI的CS引脚设置为高电平有效

 
目前正在调试,利用SDK的工具ssp_write命令发出的信号都是先cs拉低之后才有数据传输,但是目标芯片是CS为高才开始进行数据读取,所以需要在发送数据时将cs设置为高,通过程序发现可以在设置SPI_IOC_WR_MODE时,增加SPI_CS_HIGH,配置后读取mode也是正确的配置的,但是波形还是CS至低才开始发送数据,并没有什么改变,请求大神解答
我来回答
回答4个
时间排序
认可量排序

hgj19890929

0个粉丝

4

问答

0

专栏

0

资料

hgj19890929 2017-11-23 14:01:29
认可0
本帖最后由 hgj19890929 于 2017-11-23 14:02 编辑

目标芯片需要如下信号,另外cs拉高到第一个clk之间不要超过1us这个要怎么实现?

hgj19890929

0个粉丝

4

问答

0

专栏

0

资料

hgj19890929 2017-11-27 17:38:43
认可0
问题已解决,海思spi1的cs0通道,一共4个管脚,分别是SCLK,SDO,SOI,CSN0,现将SCLK,SDO,SOI,映射为spi功能:
himm 0x200f0050 0x1   
himm 0x200f0054 0x1   
himm 0x200f0058 0x1   
之后配置CSN0为GPIO输出管脚
himm 0x20180400 0x04

在程序中增加
#include

#define GPIO00_BASE (0x20140000)
#define GPIO01_BASE (0x20150000)
#define GPIO02_BASE (0x20160000)
#define GPIO03_BASE (0x20170000)
#define GPIO04_BASE (0x20180000)
#define GPIO05_BASE (0x20190000)
#define GPIO06_BASE (0x201A0000)
#define GPIO07_BASE (0x201B0000)
#define GPIO08_BASE (0x201C0000)
#define GPIO09_BASE (0x201D0000)
#define GPIO10_BASE (0x201E0000)
#define GPIO11_BASE (0x201F0000)

unsigned int GPIO_REG[]=
{
    GPIO00_BASE,
    GPIO01_BASE,
    GPIO02_BASE,
    GPIO03_BASE,
    GPIO04_BASE,
    GPIO05_BASE,
    GPIO06_BASE,
    GPIO07_BASE,
    GPIO08_BASE,
    GPIO09_BASE,
    GPIO10_BASE,
    GPIO11_BASE,
};

unsigned int GPIO_DIR[]=
{
    IO_ADDRESS(GPIO00_BASE + 0x400),
    IO_ADDRESS(GPIO01_BASE + 0x400),
    IO_ADDRESS(GPIO02_BASE + 0x400),
    IO_ADDRESS(GPIO03_BASE + 0x400),
    IO_ADDRESS(GPIO04_BASE + 0x400),
    IO_ADDRESS(GPIO05_BASE + 0x400),
    IO_ADDRESS(GPIO06_BASE + 0x400),
    IO_ADDRESS(GPIO07_BASE + 0x400),
    IO_ADDRESS(GPIO08_BASE + 0x400),
    IO_ADDRESS(GPIO09_BASE + 0x400),
    IO_ADDRESS(GPIO10_BASE + 0x400),
    IO_ADDRESS(GPIO11_BASE + 0x400),
};

unsigned char GPIO_BIT[]=
{
    (1 << 0),    /* GPIO X_0 */
    (1 << 1),    /* GPIO X_1 */
    (1 << 2),    /* GPIO X_2 */
    (1 << 3),    /* GPIO X_3 */
    (1 << 4),    /* GPIO X_4 */
    (1 << 5),    /* GPIO X_5 */
    (1 << 6),    /* GPIO X_6 */
    (1 << 7),    /* GPIO X_7 */
};

#define HW_REG(reg)         *((volatile unsigned int *)(reg))
#define GPIO_BIT_REG(X, Y) (IO_ADDRESS(GPIO_REG[X] + ((GPIO_BIT[Y])<<2)))
在spi驱动中的读写函数中
调用spi_async之前增加CSN0控制逻辑,使CSN0先置低再置高,即可满足时序要求。3518ev200中是GPIO4_2
    unsigned int  memaddr;
    unsigned int regvalue;   
    memaddr = GPIO_BIT_REG(4, 2);   
    regvalue = HW_REG(memaddr);

    regvalue &= ~GPIO_BIT[2];   
    HW_REG(memaddr) = regvalue;
        udelay(1);
    regvalue |= GPIO_BIT[2];   
    HW_REG(memaddr) = regvalue;

    status = spi_async(spi, m);

stoneLinux

0个粉丝

3

问答

0

专栏

0

资料

stoneLinux 2018-09-18 22:36:38
认可0
感谢楼主的无私奉献和辛勤付出!

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2018-09-19 08:47:17
认可0
marking           :victory:
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
更多相似问答
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区