1. bread电子发烧友论坛/
  2. 嵌入式论坛/
    1. 电子论坛综合区
    2. 嵌入式论坛
    3. 电源技术论坛
    4. 硬件设计论坛
    5. 测试测量论坛
    6. 检测技术与质量
    7. EDA设计论坛
    8. 综合技术与应用
    9. 开源硬件
    10. IC设计论坛
    11. 消费电子论坛
    12. 无线通信论坛
    13. 个人版区
    14. 厂商专区
    15. 论坛服务区
    16. 高校联盟
    17. 供求信息发布
  3. 单片机/MCU论坛
    1. ARM技术论坛
    2. Android论坛
    3. Linux论坛
    4. MSP430技术论坛
    5. FPGA|CPLD|ASIC论坛
    6. STM32/STM8技术论坛
    7. NXP MCU 技术论坛
    8. PIC单片机论坛
    9. DSP论坛
    10. 瑞萨单片机论坛
    11. 嵌入式系统论坛
  4. / 原创atmel sam4s16c教程 之spi
    关闭提示

[资料] 原创atmel sam4s16c教程 之spi

[复制链接]
版主
发表于 2016-10-20 17:09:32   1729 查看 4 回复 只看该作者 倒序浏览
分享
本帖最后由 lee_st 于 2016-10-21 11:35 编辑

按项目的要求,在原有的基础上增加了定时器功能
仔细研究Datasheet中关于spi的部分

框图见附图





最大的频率只能到达MCK(系统主时钟的6分频),假如单片机主频MCK120MSPI的速率最大也就是20M。在SAM4中有3SPI模块,分别是一个SPI,两个USART下的SPI模式,分别由USART0USART1产生。
见附图
SPI的四种模式如下图:这四种模式选择要根据你所要通信的器件所支持的方式而选择。
见附图

代码分这几部走:
1)管脚的配置部分:把管脚设置为USART模式,代码如下:
gpio_configure_pin(PIO_PA22_IDX,(PIO_PERIPH_A | PIO_DEFAULT));
gpio_configure_pin(PIO_PA23_IDX,(PIO_PERIPH_A | PIO_DEFAULT));
2USART_SPI的参数配置,代码如下:
usart_spi_init(USART1);//初始化SPI,主要是使能USART的时钟
//设置SPI的传输数据的模式和频率,这里我设置到最大20M,单片机的主频为120M
usart_spi_setup_device(USART1,&USART_SPI_DEVICE_EXAMPLE,SPI_MODE_0, 20000000, 0);
usart_spi_enable(USART1);//使能SPI
oled的底层SPI驱动的修改:

本项目的spi通讯有2个slave,eeprom和oled
分别通过2个片选控制。

代码如下:
spi初始化
void spi_master_initialize(void)
{
        // Configure an SPI peripheral.
        spi_enable_clock(SPI);
        spi_disable(SPI);
        spi_reset(SPI);
        spi_set_lastxfer(SPI);
        spi_set_master_mode(SPI);
        spi_disable_mode_fault_detect(SPI);
        spi_set_peripheral_chip_select_value(SPI, SPI_CHIP_SEL);
        spi_set_clock_polarity(SPI, SPI_CHIP_SEL, SPI_CLK_POLARITY);
        spi_set_clock_phase(SPI, SPI_CHIP_SEL, SPI_CLK_PHASE);
        
        spi_set_bits_per_transfer(SPI, SPI_CHIP_SEL, SPI_CSR_BITS_12_BIT);  
        
        spi_set_baudrate_div(SPI, SPI_CHIP_SEL, 30);
        
        spi_set_transfer_delay(SPI, SPI_CHIP_SEL, SPI_DLYBS, SPI_DLYBCT);
        
        
        spi_set_clock_polarity(SPI, SPI_CHIP1_SEL, 0);
        spi_set_clock_phase(SPI, SPI_CHIP1_SEL, 1);
        spi_set_bits_per_transfer(SPI, SPI_CHIP1_SEL, SPI_CSR_BITS_8_BIT);
        
        spi_set_baudrate_div(SPI, SPI_CHIP1_SEL, 120); //EEPROM工作在1MHz

        spi_set_transfer_delay(SPI, SPI_CHIP1_SEL, SPI_DLYBS, SPI_DLYBCT);
        
        spi_enable(SPI);
        spi_set_peripheral_chip_select_value(SPI, SPI_CHIP_SEL);
}


void spi_read1(Spi *p_spi, uint16_t *spi_data)
{

        static uint32_t reg_value;

        reg_value = p_spi->SPI_RDR;

        *spi_data = (uint16_t) (reg_value & SPI_RDR_RD_Msk);

}

void write_data(uint8_t int_dat)  
{
        uint16_t flag = 0x300;
        uint16_t switch_dat;
        
        switch_dat = flag + int_dat;
        switch_dat = switch_dat * 2;
        spi_master_transfer(&switch_dat,1);
        
}

关于分别用在oled和eeprom,有时间整理一下再放上








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册
x
实习生
发表于 2016-11-9 15:38:37  
SPI_CHIP_SEL是什么
回复 举报
版主
发表于 2016-11-10 08:55:36    楼主|
片选,,,,,,,,,
回复 举报
版主
发表于 2016-11-10 09:28:59    楼主|
一般宏定义都能直接看懂是什么
回复 点赞 举报
版主
发表于 2016-11-15 00:24:48    楼主|
也被推荐了,谢谢
回复 举报
高级模式
您需要登录后才可以回帖 登录 | 注册
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
  1. time最新主题
  2. recommend推荐主题
  3. hot热门主题
  4. post 我的帖子
-

推荐专区

技术干货集中营

专家问答

方案交易

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

电子展览展会专区

芯片求购|供应发布区

鸿运国际手机版