1008|3

2943

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

【瑞萨RA6E2评估板】I2C总线设备的兼容性测试 [复制链接]

RA6E2的IIC总线测试使用的是r_sci_i2c Stack协议栈,硬件使用的是OLED SSD1306显示屏,具体配置如下:

  引脚为P110和P109,

引脚配置如下:

 

  看上去,应该没有什么错误,程序和配置都是参考最新的ek_ra6e2配置和程序,

 

主要的调用为:

err = R_SCI_I2C_Open(&g_sci_i2c_master_ctrl, &g_sci_i2c_master_cfg);
err = R_SCI_I2C_Write(&g_sci_i2c_master_ctrl, i2c_buf, I2C_TWO_BYTE, false);

两个函数,硬件使用的是ssd1306 IIC串口屏,该屏在RA4E1的开发板上面已经成功点亮

 

可以证明这个驱动的逻辑和硬件是没有问题的。

本次的程序代码如下:

/***********************************************************************************************************************
 * Copyright [2020-2023] Renesas Electronics Corporation and/or its affiliates.  All Rights Reserved.
 *
 * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products
 * of Renesas Electronics Corp. and its affiliates ("Renesas").  No other uses are authorized.  Renesas products are
 * sold pursuant to Renesas terms and conditions of sale.  Purchasers are solely responsible for the selection and use
 * of Renesas products and Renesas assumes no liability.  No license, express or implied, to any intellectual property
 * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas
 * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION
 * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT
 * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR
 * DOCUMENTATION.  RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH.  TO THE MAXIMUM
 * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION
 * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING,
 * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS,
 * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY
 * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS.
 **********************************************************************************************************************/

#include "hal_data.h"
#include "oled.h"
#include <stdio.h>

/* Macro definition */
#define CARRIAGE_ASCII            (13u)     /* Carriage return */
#define ZERO_ASCII                (48u)     /* ASCII value of zero */
#define NINE_ASCII                (57u)     /* ASCII value for nine */
#define DATA_LENGTH               (4u)      /* Expected Input Data length */
#define UART_ERROR_EVENTS         (UART_EVENT_BREAK_DETECT | UART_EVENT_ERR_OVERFLOW | UART_EVENT_ERR_FRAMING | \
                                    UART_EVENT_ERR_PARITY)    /* UART Error event bits mapped in registers */
#define RESET_VALUE               (0x00)

/* Flag for user callback */
static volatile uint8_t g_uart_event = RESET_VALUE;
static uint8_t g_temp_buffer[DATA_LENGTH] = {RESET_VALUE};
/* Counter to update g_temp_buffer index */
static volatile uint8_t g_counter_var = RESET_VALUE;
/* Flag to check whether data is received or not */
static volatile uint8_t g_data_received_flag = false;

void R_BSP_WarmStart(bsp_warm_start_event_t event);

extern bsp_leds_t g_bsp_leds;

static volatile bool g_sw_press;

/*******************************************************************************************************************//**
 * [url=home.php?mod=space&uid=159083]@brief[/url] Blinky example application
 *
 * Blinks all leds at a rate of 1 second using the software delay function provided by the BSP.
 *
 **********************************************************************************************************************/
void hal_entry (void)
{
#if BSP_TZ_SECURE_BUILD

    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif

	  fsp_err_t  err = FSP_SUCCESS;
	  uint32_t local_timeout = (DATA_LENGTH * UINT16_MAX);

    /* Define the units to be used with the software delay function */
    const bsp_delay_units_t bsp_delay_units = BSP_DELAY_UNITS_MILLISECONDS;

    /* Set the blink frequency (must be <= bsp_delay_units */
    const uint32_t freq_in_hz = 2;

    /* Calculate the delay in terms of bsp_delay_units */
    const uint32_t delay = bsp_delay_units / freq_in_hz;

    /* LED type structure */
    bsp_leds_t leds = g_bsp_leds;

    /* If this board has no LEDs then trap here */
    if (0 == leds.led_count)
    {
        while (1)
        {
            ;                          // There are no LEDs on this board
        }
    }

    /* Holds level to set for pins */
    bsp_io_level_t pin_level = BSP_IO_LEVEL_LOW;

		unsigned char send_buff[32]="RA Keil ADC\r";
		
		err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
    if(FSP_SUCCESS != err) __BKPT();
		
		size_t buff_len = strlen((char *)send_buff);
		
		err = R_SCI_UART_Write(&g_uart0_ctrl, send_buff, buff_len);
		if(FSP_SUCCESS != err) __BKPT();
		
		while ((UART_EVENT_TX_COMPLETE != g_uart_event) && (--local_timeout))
    {
        /* Check if any error event occurred */
        if (UART_ERROR_EVENTS == g_uart_event)
        {
            break;
        }
    }
		
		err = R_ICU_ExternalIrqOpen(&g_external_irq9_ctrl,&g_external_irq9_cfg);
		if(FSP_SUCCESS != err) __BKPT();
		
		err = R_ICU_ExternalIrqEnable(&g_external_irq9_ctrl);
		if(FSP_SUCCESS != err) __BKPT();
		
		err = R_SCI_I2C_Open(&g_sci_i2c_master_ctrl, &g_sci_i2c_master_cfg);
		if(FSP_SUCCESS != err) __BKPT();		
		
		WriteCmd();//OLED???
		OLED_Clear();//??
    //OLED_ShowCHinese(16,0,0);//?
    //OLED_ShowCHinese(32,0,1);//?
    OLED_ShowString(0,0,"EEWORLD",16);
    OLED_ShowString(0,2,"RA4E1",16);
		
    while (1)
    {
        /* Enable access to the PFS registers. If using r_ioport module then register protection is automatically
         * handled. This code uses BSP IO functions to show how it is used.
         */
        R_BSP_PinAccessEnable();

        /* Update all board LEDs */
        for (uint32_t i = 0; i < leds.led_count; i++)
        {
            /* Get pin to toggle */
            uint32_t pin = leds.p_leds[i];

            /* Write to this pin */
            R_BSP_PinWrite((bsp_io_port_pin_t) pin, pin_level);
        }
        				
				if(g_sw_press)
        {
							err = R_SCI_UART_Write(&g_uart0_ctrl, send_buff, buff_len);
							if(FSP_SUCCESS != err) __BKPT();
		
							while ((UART_EVENT_TX_COMPLETE != g_uart_event) && (--local_timeout))
							{
									/* Check if any error event occurred */
									if (UART_ERROR_EVENTS == g_uart_event)
									{
											break;
									}
							}
							
							g_sw_press = false;	
				}
				
        /* Protect PFS registers */
        R_BSP_PinAccessDisable();

        /* Toggle level for next write */
        if (BSP_IO_LEVEL_LOW == pin_level)
        {
            pin_level = BSP_IO_LEVEL_HIGH;
        }
        else
        {
            pin_level = BSP_IO_LEVEL_LOW;
        }

        /* Delay */
        R_BSP_SoftwareDelay(delay, bsp_delay_units);
    }
}

/*******************************************************************************************************************//**
 * This function is called at various points during the startup process.  This implementation uses the event that is
 * called right before main() to set up the pins.
 *
 * @param[in]  event    Where at in the start up process the code is currently at
 **********************************************************************************************************************/
void R_BSP_WarmStart (bsp_warm_start_event_t event)
{
    if (BSP_WARM_START_RESET == event)
    {
#if BSP_FEATURE_FLASH_LP_VERSION != 0

        /* Enable reading from data flash. */
        R_FACI_LP->DFLCTL = 1U;

        /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and
         * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */
#endif
    }

    if (BSP_WARM_START_POST_C == event)
    {
        /* C runtime environment and system clocks are setup. */

        /* Configure pins. */
        IOPORT_CFG_OPEN(&IOPORT_CFG_CTRL, &IOPORT_CFG_NAME);
    }
}

/*****************************************************************************************************************
 *  @brief      UART user callback
 *  @param[in]  p_args
 *  @retval     None
 ****************************************************************************************************************/
void user_uart_callback(uart_callback_args_t *p_args)
{
    /* Logged the event in global variable */
    g_uart_event = (uint8_t)p_args->event;

    /* Reset g_temp_buffer index if it exceeds than buffer size */
    if(DATA_LENGTH == g_counter_var)
    {
        g_counter_var = RESET_VALUE;
    }

    if(UART_EVENT_RX_CHAR == p_args->event)
    {
        switch (p_args->data)
        {
            /* If Enter is pressed by user, set flag to process the data */
            case CARRIAGE_ASCII:
            {
                g_counter_var = RESET_VALUE;
                g_data_received_flag  = true;
                break;
            }
            /* Read all data provided by user until enter button is pressed */
            default:
            {
                g_temp_buffer[g_counter_var++] = (uint8_t ) p_args->data;
                break;
            }
        }
    }
}

/*******************************************************************************************************************//**
 *  @brief      external IRQ callback function
 *  @param[in]  p_args
 *  @retval     None
 **********************************************************************************************************************/
void user_irq_callback(external_irq_callback_args_t * p_args)
{

		if(p_args->channel == 9)
    {
			g_sw_press = true;
		}
}

整个测试做了很多遍,也没有找到任何可以的地方,但是非常遗憾的是:“OLED 屏没有任何反应”。

后来和原厂的程序做了比较:

  发现有DTC的测试出现错误,后来将RK-RA6E2的开发板的配置引入后,修改后还是无法成功。

  可以看见DTC的设置项目没有任何问题了,但是这个程序还是没有任何的反应。到目前为止还没有任何头绪。如果有知道的还请告知。项目源码 iic.zip (944.31 KB, 下载次数: 3)

 

 

 

最新回复

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来   详情 回复 发表于 2023-11-23 10:12
点赞 关注

回复
举报

231

帖子

3

TA的资源

一粒金砂(高级)

沙发
 

Pin Configuration中P110为什么显示SCI9 RXD9不应该是SDA吗?


点评

SCL9  详情 回复 发表于 2023-11-20 09:00
 
 

回复

231

帖子

3

TA的资源

一粒金砂(高级)

板凳
 
eew_TKwwQ7 发表于 2023-11-20 08:59 Pin Configuration中P110为什么显示SCI9 RXD9不应该是SDA吗?

SCL9


 
 
 

回复

756

帖子

4

TA的资源

纯净的硅(高级)

4
 

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表