NRF51822之SPI

 1 /**@brief Function for initializing a SPI master driver.
 2  *
 3  * @param[in] p_instance    Pointer to SPI master driver instance.
 4  */
 5 static void spi_master_init(nrf_drv_spi_t const * p_instance)
 6 {
 7     uint32_t err_code = NRF_SUCCESS;
 8
 9     nrf_drv_spi_config_t config =
10     {
11
12         .irq_priority = APP_IRQ_PRIORITY_LOW,
13         .orc          = 0x80,
14         .frequency    = NRF_DRV_SPI_FREQ_1M,
15         .mode         = NRF_DRV_SPI_MODE_0,
16         .bit_order    = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST,
17     };
18
19     #if (SPI0_ENABLED == 1)
20     if (p_instance == &m_spi_master_0)
21     {
22         config.ss_pin   = SPIM0_SS_PIN,
23         config.sck_pin  = SPIM0_SCK_PIN;
24         config.mosi_pin = SPIM0_MOSI_PIN;
25         config.miso_pin = SPIM0_MISO_PIN;
26         err_code = nrf_drv_spi_init(p_instance,
27                                     &config,
28                                     spi_master_0_event_handler);
29     }
30     else
31     #endif // (SPI0_ENABLED == 1)
32
33     APP_ERROR_CHECK(err_code);
34 }
 1 uint8_t  spi_write_reg(uint8_t ucRegAddr, uint8_t ucRegVal)
 2 {
 3     uint8_t buf[2];
 4     uint32_t err_code;
 5
 6     spi_xfer_done = false;
 7
 8     buf[0] = ucRegAddr<<1;
 9     buf[1] = ucRegVal;
10
11     err_code = nrf_drv_spi_transfer(&m_spi_master_0, buf, 2, NULL, 0);
12     APP_ERROR_CHECK(err_code);
13
14     while (!spi_xfer_done)
15     {
16         __WFE();
17     }
18     return true;
19 }
20
21
22 uint8_t spi_read_reg(uint8_t ucRegAddr)
23 {
24     uint8_t buf[2];
25     uint8_t rx[2];
26     uint32_t err_code;
27
28     spi_xfer_done = false;
29
30     buf[0] =( ucRegAddr<<1 ) | 0x80;
31     buf[1] = 0x00;
32
33     err_code = nrf_drv_spi_transfer(&m_spi_master_0,buf,2,rx,2);
34     APP_ERROR_CHECK(err_code);
35
36     while(!spi_xfer_done)
37     {
38         __WFE();
39     }
40
41     return rx[1];
42 }

现在我们对spi_write_reg(uint8_t ucRegAddr, uint8_t ucRegVal)进行测试

更据我们的代码在Saleae Logic 1.1.16C中进行设置如下图所示

什么看不懂上面的配置?请右转补课 http://www.cnblogs.com/libra13179/p/5740716.html

spi_write_reg(0x00,0x00)

spi_write_reg(0x01,0x02)  故意留下思考?为何下图显示是0X02而不是0x01,有什么作用呢?

时间: 2024-11-05 16:31:22

NRF51822之SPI的相关文章

nrf51822 --- spi 通信

1.目的 nrf51822 spi通信 2.分析 在实际应用中经常要用到spi通信,比如度flash 3.平台: 协议栈版本:SDK10.0.0 编译软件:keil 5.12 硬件平台:微雪开发板nrf51822 例子:SDK 10.0.0\examples\ble_peripheral\ble_app_hrs\pca10028\s110\arm4 4.步骤 1.打开\SDK10.0\components\drivers_nrf\twi_master\deprecated目录 2.把nrf_dr

[nRF51822] 2、D-BUG之诗

4线SPI彩屏局部刷屏偏移解决 ——原来我早已经在成功的旁边了 最近在研究用低速.低RAM的单片机来驱动小LCD或TFT彩屏实现动画效果 首先我用一个16MHz晶振的m0内核的8位单片机nRF51822尝试驱动一个1.77寸的4线SPI屏(128X160), 发现,刷一屏大约要0.8s左右的时间, 具体收录在<1.一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO>中 觉得,如果用72MHz的STM32也许效果会好很多 于是在stm32上做了个类似的版本, 具体收录在

&lt;转&gt;主流蓝牙BLE控制芯片详解(4):Nordic nRF51822

导读] nRF51822 是功能强大.高灵活性的多协议 SoC,非常适用于 Bluetooth® 低功耗和 2.4GHz 超低功耗无线应用. 同系列芯片资料推荐:    主流蓝牙BLE控制芯片详解(1):TI CC2540    主流蓝牙BLE控制芯片详解(2):CSR BC6130    主流蓝牙BLE控制芯片详解(3):创杰 IS1685S Nordic nRF51822简介 nRF51822 是功能强大.高灵活性的多协议 SoC,非常适用于 Bluetooth® 低功耗和 2.4GHz 超

NORDIC内核ARM蓝牙芯片NRF51802/NRF51822

Nordic  nRF51 系列的IC 和协议堆栈对内存大小.封装类型.接口.周边产品及无线连接提供更多选择. 关于 nRF51 系列 多协议 2.4GHz 射频收发器拥有高性能.超低功耗以及灵活性等好处.它的主要功能包括: 在蓝牙低功耗模式下灵敏度为-92.5dB RX, 高达 +4dBm 的输出功率: 与 Nordic 上一代射频收发器相比,链接预算增强高达 9.5dBm: 低于10mA 的峰值电流适合3V 纽扣电池: 符合蓝牙低功耗(蓝牙 4.0 )标准: 与 Nordic 现有的 nRF

RT-thread 设备驱动组件之SPI设备

本文主要介绍RT-thread中的SPI设备驱动,涉及到的文件主要有:spi_dev.c,spi_core.c,spi.h,spi_hard.c,spi_hard.h. 一.SPI设备框架 先来看spi.h中的一些数据结构: ** * SPI message structure */ struct rt_spi_message { const void *send_buf; void *recv_buf; rt_size_t length; struct rt_spi_message *next

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体温计.耳温枪.皮肤水分计等), 再到智能家居等领域均占有一席之地. 而蓝牙低功耗(BLE)是在蓝牙4.0协议上修改以适用低功耗应用场景的一种蓝牙协议. 随着上一股智能消费类电子大潮的到来,BLE的各种应用也像雨后春笋般在市场上铺开. 如果想 紧跟蓝牙协议的最新动态 ,可以在https://www.b

SPI设备的驱动

主要包括两个SPI设备步骤:register_chrdevspi_register_driver关键点1:spi_board_info可以去已经运行的板子下面找例子:/sys/bus/spi/drivers已辰汉电子MX27 MDK 开发板为例:在/sys/bus/spi/drivers目录:lcd_spi pmic_spi 对应的:mx27mdk27v0.c文件中定义如下: static struct spi_board_info mxc_spi_board_info[] __initdata

spi flash偶尔出现写入错误的情况

spi flash W25Q128会偶尔出现写入错误的情况,会发现读出的值和写入的值不一致,需加入2次读出比较判断. W25QXX_Read(&temp_date_count,0x000000,1); //W25QXX_Write((u8*)&temp_date,0x400000,135); //W25QXX_Read((u8*)&temp_data_test,0x400000,135); W25QXX_Write((u8*)&temp_date,(temp_date_co

linux enc28j60网卡驱动移植(硬件spi和模拟spi)

本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因...刚好手上有一个enc28j60的网卡模块,于是就着手移植enc28j60的驱动. 其实移植enc28j60的驱动也十分简单,网上有现成的,只需要分配一些硬件资源即可. 由于我的内核版本老到掉牙,没有自带enc28j60的驱动,只能在网上找一个: enc28j60.c http://git.ti.com/ti-linux-kernel/ti-li