@@ -764,15 +764,36 @@ static u8_t MALIGN(4) _ccm_scratch[(RADIO_PDU_LEN_MAX - 4) + 16];
764
764
765
765
void * radio_ccm_rx_pkt_set (struct ccm * ccm , void * pkt )
766
766
{
767
+ u32_t mode ;
768
+
767
769
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Disabled ;
768
770
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Enabled ;
769
- NRF_CCM -> MODE =
770
- #if !defined (CONFIG_SOC_SERIES_NRF51X )
771
- ((CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
772
- CCM_MODE_LENGTH_Msk ) |
771
+ mode = (CCM_MODE_MODE_Decryption << CCM_MODE_MODE_Pos ) &
772
+ CCM_MODE_MODE_Msk ;
773
+ #if defined(CONFIG_SOC_SERIES_NRF52X )
774
+ /* Enable CCM support for 8-bit length field PDUs. */
775
+ mode |= (CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
776
+ CCM_MODE_LENGTH_Msk ;
777
+
778
+ /* Select CCM data rate based on current PHY in use. */
779
+ /* TODO: add cases for nRF52840's coded PHY */
780
+ switch ((NRF_RADIO -> MODE & RADIO_MODE_MODE_Msk ) >>
781
+ RADIO_MODE_MODE_Pos ) {
782
+ default :
783
+ case RADIO_MODE_MODE_Ble_1Mbit :
784
+ mode |= (CCM_MODE_DATARATE_1Mbit <<
785
+ CCM_MODE_DATARATE_Pos ) &
786
+ CCM_MODE_DATARATE_Msk ;
787
+ break ;
788
+
789
+ case RADIO_MODE_MODE_Ble_2Mbit :
790
+ mode |= (CCM_MODE_DATARATE_2Mbit <<
791
+ CCM_MODE_DATARATE_Pos ) &
792
+ CCM_MODE_DATARATE_Msk ;
793
+ break ;
794
+ }
773
795
#endif
774
- ((CCM_MODE_MODE_Decryption << CCM_MODE_MODE_Pos ) &
775
- CCM_MODE_MODE_Msk );
796
+ NRF_CCM -> MODE = mode ;
776
797
NRF_CCM -> CNFPTR = (u32_t )ccm ;
777
798
NRF_CCM -> INPTR = (u32_t )_pkt_scratch ;
778
799
NRF_CCM -> OUTPTR = (u32_t )pkt ;
@@ -793,15 +814,24 @@ void *radio_ccm_rx_pkt_set(struct ccm *ccm, void *pkt)
793
814
794
815
void * radio_ccm_tx_pkt_set (struct ccm * ccm , void * pkt )
795
816
{
817
+ u32_t mode ;
818
+
796
819
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Disabled ;
797
820
NRF_CCM -> ENABLE = CCM_ENABLE_ENABLE_Enabled ;
798
- NRF_CCM -> MODE =
799
- #if !defined (CONFIG_SOC_SERIES_NRF51X )
800
- ((CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
801
- CCM_MODE_LENGTH_Msk ) |
821
+ mode = (CCM_MODE_MODE_Encryption << CCM_MODE_MODE_Pos ) &
822
+ CCM_MODE_MODE_Msk ;
823
+ #if defined(CONFIG_SOC_SERIES_NRF52X )
824
+ /* Enable CCM support for 8-bit length field PDUs. */
825
+ mode |= (CCM_MODE_LENGTH_Extended << CCM_MODE_LENGTH_Pos ) &
826
+ CCM_MODE_LENGTH_Msk ;
827
+
828
+ /* NOTE: use fastest data rate as tx data needs to be prepared before
829
+ * radio Tx on any PHY.
830
+ */
831
+ mode |= (CCM_MODE_DATARATE_2Mbit << CCM_MODE_DATARATE_Pos ) &
832
+ CCM_MODE_DATARATE_Msk ;
802
833
#endif
803
- ((CCM_MODE_MODE_Encryption << CCM_MODE_MODE_Pos ) &
804
- CCM_MODE_MODE_Msk );
834
+ NRF_CCM -> MODE = mode ;
805
835
NRF_CCM -> CNFPTR = (u32_t )ccm ;
806
836
NRF_CCM -> INPTR = (u32_t )pkt ;
807
837
NRF_CCM -> OUTPTR = (u32_t )_pkt_scratch ;
0 commit comments