【芯海传感器信号调理CDS8712开发板】之三 范例代码结合ISP功能分析
[复制链接]
1. 经过1周的逐个范例代码分析,并对照数据表的内存分配,范例程序中的GPIO和UART等代码都是完整和一致的。
以下述GPIO代码精简后如下,
#include "cds871x_gpio.h"
#include "delay.h"
#define VDD_VALUE 3300U /*!< Value of VDD in mv */
gpio_config_t ptr_config;
int main(void)
{
delay_init();
rcc_ahb_periph_clock_enable_ctrl(RCC_AHBPeriph_GPIOA, ENABLE);
ptr_config.mode = GPIO_MODE_OUT_PP;
ptr_config.pin = GPIO_PIN_1;
ptr_config.pull = GPIO_PULL_UP;
gpio_init(GPIO_GROUP_A,&ptr_config);
while(1)
{
gpio_bit_write(GPIO_GROUP_A,GPIO_PIN_NUM1,BIT_SET);
delay_ms(500);
gpio_bit_write(GPIO_GROUP_A,GPIO_PIN_NUM1,BIT_RESET);
delay_ms(500);
}
}
上述代码就是引用HAL库中的参数先定义引脚功能,再启动时钟延时控制,实现对于PA1的输出控制。
部分GPIO的HAL控制如下,
{
GPIO_MODE_IN = 0x00, //!< GPIO Input mode
GPIO_MODE_OUT_PP = 0x01, //!< GPIO Output Push-pull mode, only avalaible for GPIOB
GPIO_MODE_OUT_OD = 0x03, //!< GPIO Output Open-drain mode
GPIO_MODE_AN = 0x04 //!< GPIO Analog mode
}gpio_mode_t;
#define GPIO_MODE_CHECK(flag) (((flag) == GPIO_MODE_IN) || \
((flag) == GPIO_MODE_OUT_PP) || \
((flag) == GPIO_MODE_OUT_OD) || \
((flag) == GPIO_MODE_AN))
/**
* @brief gpio pull up selection
*/
typedef enum
{
GPIO_PULL_NO_PULL = 0x00, //!< No PullUp/PullDown config
GPIO_PULL_UP = 0x01, //!< GPIO PullUp config, only available for GPIOB
}gpio_pull_t;
#define GPIO_PULL_CHECK(flag) (((flag) == GPIO_PULL_NO_PULL) || \
((flag) == GPIO_PULL_UP))
/**
* @struct gpio_config_t
* @brief GPIO Init structure definition
*/
typedef struct
{
uint16_t pin; //!< Specifies the GPIO pins to be configured
gpio_mode_t mode; //!< Specifies the operating mode for the selected pins
gpio_pull_t pull; //!< Specifies the pull up
}gpio_config_t;
上述代码编译正确行下载成功后,并没有显示出GPIO的控制效果,类似的UART的输出也没有在串口控制器有任何显示。
如果使用逻辑分析仪就会更清楚,上述引脚完全没有输出。
2、经过对照说明,是ISP的设置有出入。具体如下,
CDS871x 内嵌片上 FLASH,包括 60KB 应用程序内存(APROM)和 4KB 在系统编程 (ISP) 空间
(LDROM),可以通过 ISP 更新。当芯片焊到 PCB 板子上以后,In System Programming (ISP) 功能使用
户能更新应用程序内存。芯片上电以后,CPU 从 APROM 还是 LDROM 取代码运行,取决于用户配置
区 Config0 中启动选项(CBS)的设置。
FLASH 存储器控制器由从机接口,ISP 控制逻辑,烧写器接口和 FLASH 宏接口时序控制逻辑组成。
FLASH 存储器控制器框图如下所示(以下是 CPU 读取指令的地址编码及寻找范围)。
现在的代码并没有从APPROM启动,所以正确下载到ROM的代码没有执行。
3、ISP是有CONFIG设置存储器确定的,范例工程中地址如下
数据表中的地址如下
CDS871x 提供在系统编程 (ISP) 特性,允许用户直接更新 PCB 板上芯片中的程序,提供 4KB 程序
存储区专门用于存储 ISP 固件。用户设置 CONFIG0 的(CBS)选择系统上电后从 APROM 启动还是
LDROM 启动。用户配置区都是写保护(ISP 可读,CFGUEN=1 时可写擦除)。
这个在是否ISP写入,出厂配置数值这里并没有找到对应的说明。如果修改,需要先进入ISP模式。
4. 这个部分初步分析是否正确,提出想法一起尝试讨论,看是否可以进一步了解ISP的执行方法和机制。然后才能去进入GPIO等引脚功能的测试。
|