16个员额/ 0个新员额
最后发表
asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
UART配置。

你好,
我使用的是DA14580,现在我想用UART接口将我的DA14580与另一个单片机连接,可以使用哪些端口引脚?我的DA14580也使用了I2C-EEPROM。

谢谢,
asmaitha

VesaN
离线
最后看到:5年10个月前
格鲁鲁 主
加入:2014-06-26 08:49
你好,

你好,
我没有使用外部处理器配置的DA1458x,但是/ keil_Projects / proximity / eporter_fe /中有和示例

我认为您可以通过GPIO多路复用来选择UART的引脚配置。请参阅文件periph_setup.cn(在μVision的项目视图中的Arch文件夹中)您有GPIO_CONFIGUREPIN函数。以上引脚配置,您还必须保留IO(开发时)。这是通过Letail_GPIO宏完成的。

最好的问候,vesa

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好,视频电子设备标准协会,

你好,视频电子设备标准协会,
谢谢你提供的详情。
我的怀疑是,任何端口上的任何PIN可以用作UART引脚吗?我也对SPI同样怀疑吗?
P1_0,P1_1,P1_2引脚可以EB使用串行CLK,串行数据,串行芯片选择引脚?

是否有文档描述每个引脚可以支持哪些不同的功能?

谢谢
asm

VesaN
离线
最后看到:5年10个月前
格鲁鲁 主
加入:2014-06-26 08:49
根据数据表

根据数据表,您可以在任何端口上使用UART(http://support.dialog-semiconductor.com/resource/da14580-datasheet第7页)

属下做输出。UART传输数据。映射到Px端口
URX DI输入。UART接收数据。映射到Px端口
urts进行输出。UART请求发送。映射到Px端口
开普敦大学DI输入。UART清除发送。映射到Px端口
UTX2做输出。UART 2传输数据。映射到Px端口
URX2 DI输入。UART 2接收数据。映射到Px端口
URTS2做输出。UART 2发送请求。映射到Px端口
UCTS2 DI输入。UART 2清除发送。映射到Px端口

这同样适用于SPI总线

SPI_CLK进行输入/输出。SPI时钟。映射到Px端口
SPI_DI DI输入。SPI数据输入。映射到Px端口
SPI_DO进行输出。SPI数据输出。映射到Px端口
SPI_EN DI输入。SPI时钟启用。映射到Px端口

查看其他PIN映射的数据表。请注意,模拟接口使用固定映射。

谢谢!

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好,视频电子设备标准协会,

你好,视频电子设备标准协会,
非常感谢。
现在我明白了,只要我们在peripher_setup .h文件中适当初始化这些引脚,任何Px引脚都可以配置为SPI接口引脚。
但根据DA14580数据表SPI仅支持8/16/32位模式传输,但我的从站的寄存器数据尺寸为24位。在此方案中传输数据。

谢谢
soujanya.k.

VesaN
离线
最后看到:5年10个月前
格鲁鲁 主
加入:2014-06-26 08:49
嗨Soujanya。K,

嗨Soujanya。K,

那么我猜你可以使用8位模式:

SetBits16 (SPI_CTRL_REG SPI_WORD SPI_MODE_8BIT);//设置为8位模式

并在3个8位块块中进行读写操作:

uint8_t write_buf [] = {0x01,0x02,0x03};
Const int chunk_size = 24/8;
Int c = 0;
而(c
SetWord16 (SPI_RX_TX_REG0 * write_buf + +);//写入设备,自增后
做{
} whiled(getBits16(spi_ctrl_reg,spi_int_bit)== 0);//虽然RX寄存器为空

SetWord16 (SPI_CLEAR_INT_REG, 1);/ /清楚SPI_INT_BIT
c++;/ /增加c

类似的东西,我还没有测试过!!

PS.如果你想同时读取,你需要这样做read_buf = GetWord16(SPI_RX_TX_REG0) & 0xff;用0xff屏蔽只是为了确保没有不需要的数据到达。这个方法有点棘手,你需要使用缓冲区…我从未遇到过SPI块大小为24位的设备

我在短时间内没有提出其他想法

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好,视频电子设备标准协会,

你好,视频电子设备标准协会,
非常感谢。
幸运的是,我正在使用的芯片不允许读取操作i.e.没有MISO信号。
所以我只需要执行SPI_Write操作。

谢谢
asm

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好,

你好,

我有一个包含3Differ控制寄存器的从站,
根据我的SPI从设备数据表在每个SPI_WRITE操作之后,我需要在我做一个SPI_WRITE之前等待10MSEC:
spi_write (register1、数据);
延迟(10毫秒);
spi_write (register2、数据);
延迟(10毫秒);

我如何引入这个10毫秒的延迟?

谢谢,
asmaitha

VesaN
离线
最后看到:5年10个月前
格鲁鲁 主
加入:2014-06-26 08:49
asmatha你好,

asmatha你好,

您可以使用内核定时器。

  1. 创建一个新的app_msg.输入文件app_api.h描述你的时间,例如,APP_EVENT_TIMER
  2. 为计时器创建一个处理函数。处理函数的类型为int timer_handler(ke_msg_id_t const msgs,void const * param,ke_task_id_t const dest_id,ke_task_id_t const src_id).将函数定义也添加到头文件中!这个函数必须对文件可见app_task_handlers.h
  3. 在文件app_task_handlers.h,将创建的handler函数添加到计时器中:{app_event_timer,(ke_msg_func_t)app_event_timer_handler}.如果需要,请添加特定配置文件包括条件。
  • 使用功能ke_timer_set设置计时器。
  • 要清除计时器,请使用ke_timer_clear

注意:这是内核计时器,它有点不准确,但我想应该工作。至少,您可以先尝试一下。

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好,视频电子设备标准协会,

你好,视频电子设备标准协会,
非常感谢你的帮助。

我真的很抱歉,但我理解如何定义和调用timer_handler在我的spi驱动程序文件。
请您指导我一些实现的例子。

在DSPS_0示例中的位置 - > DSPS_0 \ DA14580_DSPS_3.150.2 \ DK_APPS \ SRC \ PLF \ RECIP \ SRC \ DREVER \ TIMER中,有一个TIMER.H文件我们可以直接使用这些函数来生成微秒延迟。

谢谢,
asmaitha

VesaN
离线
最后看到:5年10个月前
格鲁鲁 主
加入:2014-06-26 08:49
asmatha你好,

asmatha你好,

是的,看来你可以用timer_wait功能等待最大1000µs,或1ms。

您需要在头文件中定义处理程序函数,然后将其包含在spi驱动程序中。

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好,视频电子设备标准协会,

你好,视频电子设备标准协会,
谢谢你提供的信息。

在Peripheral_examples中的一个SDK示例中:
我发现
(我= 00;< 20;我+ +);这个循环引入了7.6微秒的延迟
所以我们可以使用这个循环延迟吗?

建议使用此逻辑吗?

谢谢
asmaitha

VesaN
离线
最后看到:5年10个月前
格鲁鲁 主
加入:2014-06-26 08:49
嗨asmaitha,

嗨asmaitha,

如果你需要非常短的延迟,那么是的,我认为使用这个是可以的。

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好VesaN,

你好VesaN,
谢谢,我测试了长达10秒的延迟,不是很准确。
我想知道BLE DA14580是否支持多线程概念?
我的设想是
我有一段时间(1)循环运行,我正在GPIO上注册IRQ(对于一个关键新闻事件),
所以当键被按下时,如果while(1)正在执行,那么我们应该跳出while循环,反之亦然。当(1)应该开始执行时,再次按下下一个键)

但我观察到的是,由于(1)循环,我的中断不会被执行。

任何想法如何实现上述逻辑?

谢谢,
asmaitha

VesaN
离线
最后看到:5年10个月前
格鲁鲁 主
加入:2014-06-26 08:49
asmatha你好,

asmatha你好,

多线程究竟是什么意思?在任何情况下,我想这是一个操作系统的问题..

如果配置正确,即使在while(1){}循环中,GPIO中断也应该工作。

我认为你不应该使用while(1)循环,如果你使用SDK。毫无疑问,这个循环会打破它,你会遇到一些奇怪的问题。

你想通过按按钮达到什么目的?也许我们能找到一个比while循环更好的解决方案

asmaitha
离线
最后看到:5年6个月前
专家
加入:2014-11-20时间为
你好VesaN,

你好VesaN,
我有一个while(1)循环,它继续在SPI上写特定的数据到我的从设备。
我在P0_7上有一个键,所以当我按下这个键时,它会变低,反弹周期为10毫秒,从而产生中断。
我将中断注册为:
GPIO_RegisterCallback (GPIO0_IRQn keysweep_callback);
gpio_enableirq(gpio_port_0,gpio_pin_7,gpio0_irqn,1,1,10);

在我的回调中:

空白keysweep_callback(空白)

如果(Key_sweep_status = = 1)
key_sweep_status = 0;
其他的
key_sweep_status = 1;

在我当(1)

if(key_sweep_status == 1)
/*做相关的动作*/
其他的
打破;

但是我遇到的是,一旦控制进入while(1)循环,即使我按下“keysweep_callback”键也不会被调用。

谢谢,
asmaitha