完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
Hi
我使用的是CC2541 Keyfob board , 軟體則使用keyfob project 正常行為下,當按下SW_2 (pin為P0_1) 的按鈕,CC2541 會進入advertising. 而我想將keyfob project燒錄到自行開發的CC2541模塊上,而唯一差別在於自行開發的CC2541模塊上按鈕的pin為P1_5。 所以我修改了hal_key.c中的程式,修改如下: /* SW_2 is at P0.1 */ /* #define HAL_KEY_SW_2_PORT P0 #define HAL_KEY_SW_2_BIT BV(1) */ #define HAL_KEY_SW_2_PORT P1 #define HAL_KEY_SW_2_BIT BV(5) 但修改過後,button SW_2無反應,而且在接上電源10秒後,會自動進入advertising 而TI的CC2541 Keyfob也有相同情形 請問是否有其他關於PIN腳的設定需要修改 ?? 或是有甚麼需要做的? |
|
相关推荐
15 个讨论
|
|
|
只改这两项不够,还有涉及中断的也需要修改,看datasheet改吧,就一外部中断的驱动。
/* SW_2 is at P0.1 */ #define HAL_KEY_SW_2_PORT P0 #define HAL_KEY_SW_2_BIT BV(1) #define HAL_KEY_SW_2_SEL P0SEL #define HAL_KEY_SW_2_DIR P0DIR #define HAL_KEY_SW_2_IEN IEN1 /* CPU interrupt mask register */ #define HAL_KEY_SW_2_ICTL P0IEN /* Port Interrupt Control register */ #define HAL_KEY_SW_2_ICTLBIT BV(1) /* P0IEN - P0.1 enable/disable bit */ #define HAL_KEY_SW_2_IENBIT BV(5) /* Mask bit for all of Port_0 */ #define HAL_KEY_SW_2_PXIFG P0IFG /* Interrupt flag at source */ #define HAL_KEY_SW_1_EDGEBIT BV(0) |
|
|
|
|
|
|
|
shenzhenqide 发表于 2020-4-2 16:58 datasheet是參考CC253x-4x User Guide. (Rev. D) _swru191d嗎?? #define HAL_KEY_SW_2_IEN IEN1 /* CPU interrupt mask register */ #define HAL_KEY_SW_2_ICTL P1IEN /* Port Interrupt Control register */ 從P0IEN 改為 P1IEN #define HAL_KEY_SW_2_ICTLBIT BV(5) /* P0IEN - P0.1 enable/disable bit */ 從BV(1) 改為 BV(5) #define HAL_KEY_SW_2_IENBIT BV(5) /* Mask bit for all of Port_0 */ #define HAL_KEY_SW_2_PXIFG P1IFG /* Interrupt flag at source */ 從P0IFG 改為 P1IFG #define HAL_KEY_SW_1_EDGEBIT BV(0) 依照程式來看,我如果將Button的PIN改為P1_5,那以上修改的方法的概念是正確的嗎?? 那想請問原本定義此外部中斷的原因為何? |
|
|
|
|
|
|
|
wuzh303 发表于 2020-4-2 17:17 Hi wun, 你可以看一下hal_key.c, 首先看一下 HalKeyInit(), 配置一下你需要的IO口的输入输出. 再看一下HAL_ISR_FUNCTION(), 这是中断处理函数, 对照修改一下, 注意参数里面 P0INT_VECTOR 对应的是port 0, 换成 P1INT_VECTOR 应该是你需要的. 前面的修改都参考一下datasheet. |
|
|
|
|
|
|
|
|
Hi , Yan 謝謝你的回答 但在HalKeyInit()中的設置 #if defined ( CC2540_MINIDK ) HAL_KEY_SW_1_SEL &= ~(HAL_KEY_SW_1_BIT); /* Set pin function to GPIO */ HAL_KEY_SW_1_DIR &= ~(HAL_KEY_SW_1_BIT); /* Set pin direction to Input */ HAL_KEY_SW_2_SEL &= ~(HAL_KEY_SW_2_BIT); /* Set pin function to GPIO */ HAL_KEY_SW_2_DIR &= ~(HAL_KEY_SW_2_BIT); /* Set pin direction to Input */ 看起來是依賴下面的定義,這邊我將PIN改為P1_5,因此P1_5為Input /* SW_2 is at P0.1 */ #define HAL_KEY_SW_2_PORT P1 #define HAL_KEY_SW_2_BIT BV(5) #define HAL_KEY_SW_2_SEL P1SEL #define HAL_KEY_SW_2_DIR P1DIR #define HAL_KEY_SW_2_IEN IEN1 // CPU interrupt mask register #define HAL_KEY_SW_2_ICTL P1IEN // Port Interrupt Control register #define HAL_KEY_SW_2_ICTLBIT BV(5) // P0IEN - P0.1 enable/disable bit #define HAL_KEY_SW_2_IENBIT BV(5) // Mask bit for all of Port_0 #define HAL_KEY_SW_2_PXIFG P1IFG // Interrupt flag at source 而將P0INT_VECTOR 改為P1INT_VECTOR 後,按Button依舊沒有反應 |
|
|
|
|
|
|
|
shenzhenqide 发表于 2020-4-2 18:25 TY , 謝謝你的回覆 !! 我目前的設定如下: #define HAL_KEY_SW_2_PORT P1 #define HAL_KEY_SW_2_BIT BV(5) #define HAL_KEY_SW_2_SEL P1SEL #define HAL_KEY_SW_2_DIR P1DIR #define HAL_KEY_SW_2_IEN IEN2 // CPU interrupt mask register #define HAL_KEY_SW_2_ICTL P1IEN // Port Interrupt Control register #define HAL_KEY_SW_2_ICTLBIT BV(5) // P0IEN - P0.1 enable/disable bit #define HAL_KEY_SW_2_IENBIT BV(4) // Mask bit for all of Port_0 #define HAL_KEY_SW_2_PXIFG P1IFG // Interrupt flag at source #define HAL_KEY_SW_2_EDGEBIT BV(2) #define HAL_KEY_SW_2_EDGE HAL_KEY_FALLING_EDGE 並在HAL_ISR_FUNCTION 中將 P0INT_VECTOR 改為 P1INT_VECTOR 以及 PICTL |= HAL_KEY_SW_1_EDGEBIT; 改為 PICTL |= HAL_KEY_SW_1_EDGEBIT | BV(2); 但按鈕還是沒有動作 請問上面定義有錯誤的嗎? |
|
|
|
|
|
|
|
|
目前板子的情形為接上電10秒後,會自動進入廣播 這是將斷點設在 if ( keys & HAL_KEY_SW_2 ) 的結果,而10秒後,這行程式的確被觸發 接著將斷點設在if( current_adv_enabled_status == FALSE ) 只是不太懂這邊所顯示的資訊... 抱歉...第一次接觸這邊 麻煩各位幫忙解答一下...謝謝 |
|
|
|
|
|
|
|
|
目前板子的情形為接上電10秒後,會自動進入廣播 這是將斷點設在 if ( keys & HAL_KEY_SW_2 ) 的結果,而10秒後,這行程式的確被觸發 接著將斷點設在if( current_adv_enabled_status == FALSE ) 只是不太懂這邊所顯示的資訊... 抱歉...第一次接觸這邊 麻煩各位幫忙解答一下...謝謝 或是Keyfob有其他地方會自動去觸發P1_5這腳位嗎? |
|
|
|
|
|
|
|
|
成功了 ! 主要在hal_key.c中仿造Port 0增加了下面這段程式 HAL_ISR_FUNCTION( halKeyPort1Isr, P1INT_VECTOR ) [ HAL_ENTER_ISR(); if ((HAL_KEY_SW_2_PXIFG & HAL_KEY_SW_2_BIT)) [ halProcessKeyInterrupt(); ] /* Clear the CPU interrupt flag for Port_0 PxIFG has to be cleared before PxIF */ HAL_KEY_SW_2_PXIFG = 0; HAL_KEY_CPU_PORT_1_IF = 0; CLEAR_SLEEP_MODE(); HAL_EXIT_ISR(); return; ] 然後將PICTL |= HAL_KEY_SW_1_EDGEBIT;改為PICTL |= HAL_KEY_SW_2_EDGEBIT; 這樣當我按下Button時,有進入廣播模式 但不好意思...又有新的問題... 我有在keyfobdemo.c中判斷當P0_4被拉低時,進入PTM模式時 而在KeyFobApp_ProcessEvent,判斷當P0_4被拉低時,按下按鈕可讓LED亮 原本在CC2541 Keyfob上,是判斷當P0_1 == 0,則讓LED亮 但現在換成P1_5 == 0好像沒有反應 if ( P1_5 == 0) [ // turn the Green LED on HalLedSet( HAL_LED_1, HAL_LED_MODE_ON ); i++; ] 請問需要另外宣告P1_5才能使用嗎?? 因為在KeyFobApp_ProcessEvent中好像也不能直接使用if(keys & HAL_KEY_SW_2)來判斷 要怎樣才能在KeyFobApp_ProcessEvent去使用P1_5這隻腳位呢? |
|
|
|
|
|
|
|
|
我在if ( keys & HAL_KEY_SW_2 )這個部份設斷點,但看到的值都是'.' (0x01) 而下面這段程式只有紅色LED閃爍動作有運作,P1_5並無動作 if(P0_4 == 0) [ HalLedSet( HAL_LED_2, HAL_LED_MODE_FLASH ); if ( P1_5 == 0) [ // turn the Green LED on HalLedSet( HAL_LED_1, HAL_LED_MODE_ON ); ] ] |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
601 浏览 0 评论
1655 浏览 0 评论
2096 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1542 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1387 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1794浏览 29评论
2822浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1748浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1668浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1681浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 13:49 , Processed in 1.192309 second(s), Total 67, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
28302