你好,我使用的是DA14580,现在我想用UART接口将我的DA14580与另一个单片机连接,可以使用哪些端口引脚?我的DA14580也使用了I2C-EEPROM。
谢谢,asmaitha
你好,我还没有使用DA1458x与外部处理器的配置,但和实施例在/ keil_projects /接近/ reporter_fe /
我想你可以选择UART引脚配置相当自由地感谢GPIO复用。请参阅文件periph_setup.c(在arch文件夹中的μVision项目视图)有你有GPIO_ConfigurePin功能。上述引脚配置,还必须预留IO(开发时)。这与RESERVE_GPIO宏来完成。
最好的问候,VESA
你好,视频电子设备标准协会,谢谢你的信息。我的疑问是,可以在任何端口上的任何引脚可作为UART引脚?我有一个关于SPI也同样疑问?灿P1_0,P1_1,P1_2引脚可用于EB串行CLK,串行数据,串行芯片选择引脚?
是否有文档描述每个引脚可以支持哪些不同的功能?
谢谢asm
根据数据表,你可以在任何端口上使用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映射数据表。注意,模拟接口用途固定映射。
谢谢!
你好,视频电子设备标准协会,非常感谢。现在我明白了,只要我们在peripher_setup .h文件中适当初始化这些引脚,任何Px引脚都可以配置为SPI接口引脚。但是,随着每DA14580数据表SPI仅支持8位/ 16位/ 32位模式转移,但我的奴隶在size.How在这种情况下传输数据的24位的寄存器中的数据。
谢谢Soujanya.K
嗨Soujanya。K,
那么我猜你可以使用8位模式:SetBits16 (SPI_CTRL_REG SPI_WORD SPI_MODE_8BIT);//设置为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寄存器为空
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_BITc++;/ /增加c}
类似的东西,我还没有测试过!!
PS.如果你想同时读取,你需要这样做read_buf = GetWord16(SPI_RX_TX_REG0) & 0xff;用0xff屏蔽只是为了确保没有不需要的数据到达。这个方法有点棘手,你需要使用缓冲区…我从未遇到过SPI块大小为24位的设备
我没有拿出在短的时间内其他想法
你好,视频电子设备标准协会,非常感谢。幸运的是,这我使用它的芯片不允许用于读操作,即没有MISO信号。所以我只需要执行SPI_Write操作。
你好,
我有一个包含3differ控制寄存器从机,按我的SPI从设备数据表每spi_write手术后我需要等待10毫秒我做一spi_write之前:spi_write (register1、数据);延迟(10毫秒);spi_write (register2、数据);延迟(10毫秒);
我如何引入这个10毫秒的延迟?
你好asmaitha,
你可以使用内核定时器。
APP_MSG
APP_EVENT_TIMER
INT timer_handler(ke_msg_id_t常量MSGID,空隙常量* PARAM,ke_task_id_t const的DEST_ID,ke_task_id_t常量src_id)
{APP_EVENT_TIMER,(ke_msg_func_t)app_event_timer_handler}
ke_timer_set
ke_timer_clear
注:这是内核计时器,它是有点有点不准确总是,但我想它应该工作。至少,你可以先试试它。
你好,视频电子设备标准协会,非常感谢你的帮助。
我真的很抱歉,但我理解如何定义和调用timer_handler在我的spi驱动程序文件。请您指导我一些实现的例子。
在该位置的DSPS_0例子 - > DSPS_0 \ DA14580_DSPS_3.150.2 \ dk_apps的\ src \ PLF \ refip的\ src \驱动程序\计时器,还有一个timer.h文件,我们可以使用这些功能直接产生微秒的延迟。
是的,看来你可以用timer_wait功能等待最大1000µs,或1ms。
timer_wait
您需要在头文件中定义处理程序函数,然后将其包含在spi驱动程序中。
你好,视频电子设备标准协会,谢谢你提供的信息。
在中peripheral_examples SDK的一个例子:我发现(我= 00;< 20;我+ +);这个循环引入了7.6微秒的延迟因此,我们可以用这个循环延误?
它会建议使用这种逻辑是什么?
谢谢asmaitha
嗨asmaitha,
如果你需要非常短的延迟,那么是的,我认为使用这个是可以的。
你好VesaN,谢谢,我测试了长达10秒的延迟,不是很准确。我想知道BLE DA14580是否支持多线程概念?我的设想是我有一段时间(1)循环运行,我注册一个GPIO一个IRQ(用于按键事件),所以当键被按下时,如果while(1)正在执行,那么我们应该跳出while循环,反之亦然。当(1)应该开始执行时,再次按下下一个键)
但我观察到的是,因为一段时间(1)循环,不执行我的中断。
任何想法如何实现上述逻辑?
你有什么确切的多线程是什么意思?在任何情况下,我想这是操作系统的问题..
如果配置正确,即使在while(1){}循环中,GPIO中断也应该工作。
我认为你不应该使用while(1)循环,如果你使用SDK。毫无疑问,这个循环会打破它,你会遇到一些奇怪的问题。
你想通过按按钮达到什么目的?也许我们能找到一个比while循环更好的解决方案
你好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”键也不会被调用。
你好,
我还没有使用DA1458x与外部处理器的配置,但和实施例在/ keil_projects /接近/ reporter_fe /
我想你可以选择UART引脚配置相当自由地感谢GPIO复用。请参阅文件periph_setup.c(在arch文件夹中的μVision项目视图)有你有GPIO_ConfigurePin功能。上述引脚配置,还必须预留IO(开发时)。这与RESERVE_GPIO宏来完成。
最好的问候,VESA
你好,视频电子设备标准协会,
谢谢你的信息。
我的疑问是,可以在任何端口上的任何引脚可作为UART引脚?我有一个关于SPI也同样疑问?
灿P1_0,P1_1,P1_2引脚可用于EB串行CLK,串行数据,串行芯片选择引脚?
是否有文档描述每个引脚可以支持哪些不同的功能?
谢谢
asm
根据数据表,你可以在任何端口上使用UART(http://support.dialog-semiconductor.com/resource/da14580-datasheet第7页)
这同样适用于SPI总线
看到其他PIN映射数据表。注意,模拟接口用途固定映射。
谢谢!
你好,视频电子设备标准协会,
非常感谢。
现在我明白了,只要我们在peripher_setup .h文件中适当初始化这些引脚,任何Px引脚都可以配置为SPI接口引脚。
但是,随着每DA14580数据表SPI仅支持8位/ 16位/ 32位模式转移,但我的奴隶在size.How在这种情况下传输数据的24位的寄存器中的数据。
谢谢
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位的设备
我没有拿出在短的时间内其他想法
你好,视频电子设备标准协会,
非常感谢。
幸运的是,这我使用它的芯片不允许用于读操作,即没有MISO信号。
所以我只需要执行SPI_Write操作。
谢谢
asm
你好,
我有一个包含3differ控制寄存器从机,
按我的SPI从设备数据表每spi_write手术后我需要等待10毫秒我做一spi_write之前:
spi_write (register1、数据);
延迟(10毫秒);
spi_write (register2、数据);
延迟(10毫秒);
我如何引入这个10毫秒的延迟?
谢谢,
asmaitha
你好asmaitha,
你可以使用内核定时器。
APP_MSG
输入文件app_api.h描述你的时间,例如,APP_EVENT_TIMER
.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{APP_EVENT_TIMER,(ke_msg_func_t)app_event_timer_handler}
.如果需要,添加特定的个人资料包括条件。ke_timer_set
设置定时器。ke_timer_clear
.注:这是内核计时器,它是有点有点不准确总是,但我想它应该工作。至少,你可以先试试它。
你好,视频电子设备标准协会,
非常感谢你的帮助。
我真的很抱歉,但我理解如何定义和调用timer_handler在我的spi驱动程序文件。
请您指导我一些实现的例子。
在该位置的DSPS_0例子 - > DSPS_0 \ DA14580_DSPS_3.150.2 \ dk_apps的\ src \ PLF \ refip的\ src \驱动程序\计时器,还有一个timer.h文件,我们可以使用这些功能直接产生微秒的延迟。
谢谢,
asmaitha
你好asmaitha,
是的,看来你可以用
timer_wait
功能等待最大1000µs,或1ms。您需要在头文件中定义处理程序函数,然后将其包含在spi驱动程序中。
你好,视频电子设备标准协会,
谢谢你提供的信息。
在中peripheral_examples SDK的一个例子:
我发现
(我= 00;< 20;我+ +);这个循环引入了7.6微秒的延迟
因此,我们可以用这个循环延误?
它会建议使用这种逻辑是什么?
谢谢
asmaitha
嗨asmaitha,
如果你需要非常短的延迟,那么是的,我认为使用这个是可以的。
你好VesaN,
谢谢,我测试了长达10秒的延迟,不是很准确。
我想知道BLE DA14580是否支持多线程概念?
我的设想是
我有一段时间(1)循环运行,我注册一个GPIO一个IRQ(用于按键事件),
所以当键被按下时,如果while(1)正在执行,那么我们应该跳出while循环,反之亦然。当(1)应该开始执行时,再次按下下一个键)
但我观察到的是,因为一段时间(1)循环,不执行我的中断。
任何想法如何实现上述逻辑?
谢谢,
asmaitha
你好asmaitha,
你有什么确切的多线程是什么意思?在任何情况下,我想这是操作系统的问题..
如果配置正确,即使在while(1){}循环中,GPIO中断也应该工作。
我认为你不应该使用while(1)循环,如果你使用SDK。毫无疑问,这个循环会打破它,你会遇到一些奇怪的问题。
你想通过按按钮达到什么目的?也许我们能找到一个比while循环更好的解决方案
你好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