[AIROC™ 蓝牙][英飞凌CYW20829测评】进阶任务

1.ADC测试开发板的ADC引脚分布如下图所示:
 


作者: 一路向北lm    时间: 2024-7-21 17:25
本次评测在英飞凌官方的DC_Monitoring例子上进行修改,具体代码如下:

复制
    while (1)

    {

        /* Monitoring for every one second */

        Cy_SysLib_Delay(1000);



        Cy_ADCMic_SetInterruptMask(adcmic_0_HW, CY_ADCMIC_INTR_DC);

        Cy_ADCMic_ClearInterrupt(adcmic_0_HW, CY_ADCMIC_INTR);



        /* Enable the DC monitoring */

        Cy_ADCMic_Enable(adcmic_0_HW);



        /* ADC Settling Time */

        Cy_SysLib_Delay(10);



        /* Enable ADC timer to generate interrupt for reading the sample */

        Cy_ADCMic_EnableTimer(adcmic_0_HW);



        /* Wait for DC monitoring samples to complete */

        while(batmon_cplt);



        for (int i = 0; i < NO_OF_DC_SAMPLES; i++)

        {

            batmon_dc_avg = batmon_dc_avg + batmon_samples[i];

        }



        batmon_dc_avg = batmon_dc_avg/NO_OF_DC_SAMPLES;



        /* Convert the ADC code in millivolts */

        batt_level_mv = Cy_ADCMic_CountsTo_mVolts((int16_t)batmon_dc_avg, adcmic_0_config.dcConfig->context );



        printf("batt_level_mv = %d \r\n",batt_level_mv);



        /* Reset for the next set of readings */

        batmon_cplt = 1;

        batmon_dc_avg = 0;

    }


作者: 一路向北lm    时间: 2024-7-21 17:28
将程序烧录到板子上,在串口上将会每秒输出ADC的电压值
 


作者: 一路向北lm    时间: 2024-7-21 17:30
串口助手可以读取到ADC值的变化


作者: 一路向北lm    时间: 2024-7-21 17:34
2.硬件ASE测试,上次玩硬件ASE还是在读研的时候,这次来感受一次英飞凌的ase
 


作者: 一路向北lm    时间: 2024-7-21 17:37
本帖最后由 一路向北lm 于 2024-7-21 17:40 编辑

加解密算法具体如下:

复制
/*******************************************************************************

* Function Name: encrypt_message_cfb

********************************************************************************

* Summary: Function used to encrypt the message through ctr mode.

*

* Parameters:

*  char * message - pointer to the message to be encrypted

*  uint8_t size   - size of message to be encrypted.

*

* Return:

*  void

*

*******************************************************************************/



void encrypt_message_ctr(uint8_t* message, uint8_t size)

{

    uint32_t srcOffset;

    cy_stc_cryptolite_aes_state_t aes_state;

    cy_stc_cryptolite_aes_buffers_t aesBuffers;

    uint8_t aes_block_count = 0;

    cy_en_cryptolite_status_t res;

    void* result;



    aes_block_count =  (size % AES128_ENCRYPTION_LENGTH == 0) ?

                       (size / AES128_ENCRYPTION_LENGTH)

                       : (1 + size / AES128_ENCRYPTION_LENGTH);

    /* Initializes the AES operation by setting key and key length */

     res = Cy_Cryptolite_Aes_Init(CRYPTOLITE, aes_key, &aes_state, &aesBuffers);

     if(res!=CY_CRYPTOLITE_SUCCESS)

     {

       CY_ASSERT(0);

     }



     srcOffset = 0;

     result = memcpy(AesCtrIV_copied, AesCtrIV, sizeof(AesCtrIV));

     res = Cy_Cryptolite_Aes_Ctr( CRYPTOLITE,

                            aes_block_count * AES128_ENCRYPTION_LENGTH,

                            &srcOffset,

                            AesCtrIV_copied,

                            encrypted_msg,

                            message,

                            &aes_state);

     if(res!=CY_CRYPTOLITE_SUCCESS)

     {

       CY_ASSERT(0);

     }

     res = Cy_Cryptolite_Aes_Free(CRYPTOLITE,&aes_state);

     if(res!=CY_CRYPTOLITE_SUCCESS)

     {

       CY_ASSERT(0);

     }

}



/*******************************************************************************

* Function Name: decrypt_message

********************************************************************************

* Summary: Function used to decrypt the message for ctr mode.

*

* Parameters:

*  char * message - pointer to the message to be decrypted

*  uint8_t size   - size of message to be decrypted.

*

* Return:

*  void

*

*******************************************************************************/



void decrypt_message_ctr(uint8_t* message, uint8_t size)

{

    uint32_t srcOffset;

    cy_stc_cryptolite_aes_state_t aes_state;

    cy_stc_cryptolite_aes_buffers_t aesBuffers;

    uint8_t aes_block_count = 0;

    cy_en_cryptolite_status_t res;

    void* result;

    aes_block_count =  (size % AES128_ENCRYPTION_LENGTH == 0) ?

                       (size / AES128_ENCRYPTION_LENGTH)

                       : (1 + size / AES128_ENCRYPTION_LENGTH);



    /* Initializes the AES operation by setting key and key length */

    res = Cy_Cryptolite_Aes_Init(CRYPTOLITE, aes_key, &aes_state, &aesBuffers);

    if(res!=CY_CRYPTOLITE_SUCCESS)

    {

        CY_ASSERT(0);

    }

    srcOffset = 0;

    /* Start decryption operation*/

    result = memcpy(AesCtrIV_copied, AesCtrIV, sizeof(AesCtrIV));

    res = Cy_Cryptolite_Aes_Ctr(  CRYPTOLITE,

                            aes_block_count * AES128_ENCRYPTION_LENGTH,

                            &srcOffset,

                            AesCtrIV_copied,

                            decrypted_msg,

                            encrypted_msg,

                            &aes_state);

    if(res!=CY_CRYPTOLITE_SUCCESS)

    {

        CY_ASSERT(0);

    }

    res = Cy_Cryptolite_Aes_Free(CRYPTOLITE,&aes_state);

    if(res!=CY_CRYPTOLITE_SUCCESS)

    {

        CY_ASSERT(0);

    }

    decrypted_msg[size]='\0';

}


 


作者: 一路向北lm    时间: 2024-7-21 17:38

对该算法实际测试了,本次评测在AES_CRYPTOLITE例程测试,IDE编程后,烧写到开发板中,串口助手显示如下:


---------------------
作者:一路向北lm
链接:https://bbs.21ic.com/icview-3390792-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值