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

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

谢谢,
asmaitha

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

你好,
我还没有使用DA1458x与外部处理器的配置,但和实施例在/ keil_projects /接近/ reporter_fe /

我想你可以选择UART引脚配置相当自由地感谢GPIO复用。请参阅文件periph_setup.c(在arch文件夹中的μVision项目视图)有你有GPIO_ConfigurePin功能。上述引脚配置,还必须预留IO(开发时)。这与RESERVE_GPIO宏来完成。

最好的问候,VESA

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

你好,视频电子设备标准协会,
谢谢你的信息。
我的疑问是,可以在任何端口上的任何引脚可作为UART引脚?我有一个关于SPI也同样疑问?
灿P1_0,P1_1,P1_2引脚可用于EB串行CLK,串行数据,串行芯片选择引脚?

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

谢谢
asm

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

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

属下做输出。UART传输数据。映射到Px端口
URX DI输入。UART接收数据。映射到Px端口
URTS DO输出。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 DO输入/输出。SPI时钟。映射到Px端口
SPI_DI DI输入。SPI数据输入。映射到Px端口
SPI_DO DO输出。SPI数据输出。映射到Px端口
SPI_EN DI输入。SPI时钟启用。映射到Px端口

看到其他PIN映射数据表。注意,模拟接口用途固定映射。

谢谢!

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

你好,视频电子设备标准协会,
非常感谢。
现在我明白了,只要我们在peripher_setup .h文件中适当初始化这些引脚,任何Px引脚都可以配置为SPI接口引脚。
但是,随着每DA14580数据表SPI仅支持8位/ 16位/ 32位模式转移,但我的奴隶在size.How在这种情况下传输数据的24位的寄存器中的数据。

谢谢
Soujanya.K

VesaN
离线
最后看到:5年4个月前
格鲁鲁 主
加入: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 [] = {0×01,0×02,×03};
Const int chunk_size = 24/8;
Int c = 0;
而(C
SetWord16 (SPI_RX_TX_REG0 * write_buf + +);//写入设备,自增后
做{
}而(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年1星期前
专家
加入:2014-11-20时间为
你好,视频电子设备标准协会,

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

谢谢
asm

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

你好,

我有一个包含3differ控制寄存器从机,
按我的SPI从设备数据表每spi_write手术后我需要等待10毫秒我做一spi_write之前:
spi_write (register1、数据);
延迟(10毫秒);
spi_write (register2、数据);
延迟(10毫秒);

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

谢谢,
asmaitha

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

你好asmaitha,

你可以使用内核定时器。

  1. 创建一个新的APP_MSG输入文件app_api.h描述你的时间,例如,APP_EVENT_TIMER
  2. 为计时器创建一个处理函数。处理函数的类型为INT timer_handler(ke_msg_id_t常量MSGID,空隙常量* PARAM,ke_task_id_t const的DEST_ID,ke_task_id_t常量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年1星期前
专家
加入:2014-11-20时间为
你好,视频电子设备标准协会,

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

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

在该位置的DSPS_0例子 - > DSPS_0 \ DA14580_DSPS_3.150.2 \ dk_apps的\ src \ PLF \ refip的\ src \驱动程序\计时器,还有一个timer.h文件,我们可以使用这些功能直接产生微秒的延迟。

谢谢,
asmaitha

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

你好asmaitha,

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

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

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

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

在中peripheral_examples SDK的一个例子:
我发现
(我= 00;< 20;我+ +);这个循环引入了7.6微秒的延迟
因此,我们可以用这个循环延误?

它会建议使用这种逻辑是什么?

谢谢
asmaitha

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

嗨asmaitha,

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

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

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

但我观察到的是,因为一段时间(1)循环,不执行我的中断。

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

谢谢,
asmaitha

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

你好asmaitha,

你有什么确切的多线程是什么意思?在任何情况下,我想这是操作系统的问题..

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

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

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

asmaitha
离线
最后看到:5年1星期前
专家
加入: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)

如果(Key_sweep_status == 1)
/*做相关的动作*/
其他的
打破;

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

谢谢,
asmaitha