中颖51芯片学习1. 系统时钟及IO口输出操作

news2025/1/20 3:50:08

中颖51芯片学习1. 系统时钟及IO口输出操作

  • 一、芯片介绍
    • 1. 规格
    • 2. 资源
    • 3. 中断源:
    • 4. 方框图
    • 5. 封装
      • (1)32脚LQFP封装
      • (2)28脚SOP封装
      • (3)20脚SOP封装
  • 二、开发环境搭建
    • 1. 安装keil
    • 2. 安装中颖keil插件包
    • 3. 调试工具
    • 4. 芯片调试引脚说明
  • 三、系统时钟
    • 1. 振荡器类型
    • 2. 系统时钟控制寄存器
        • 32k_SPDUP:32.768kHZ晶振加速位
        • CLKS[1:0] 系统时钟频率分频器
        • HFON OSCXCLK开关控制寄存器
        • FS 频率选择位
    • 3. 设置系统时钟
      • (1)设置高频
      • (2)设置低频
    • 4. 实验代码
      • (1)sysclk_define.h
      • (2)main.c
    • 5. 编译运行
      • 1. 高频运行
        • (1)sysclk_define.h 里设置:
        • (2)keil设置
      • 2.频率计算公式
      • 3. 低频运行
  • 四、I/O 端口

本系列文章使用的芯片是中颖 SH79F9476

一、芯片介绍

SH79F9476,是一款基于8051指令流水线结构的8位单片机,保留了标准8051芯片的大部分特性,如256字节RAM、3路UART、外部中断0、2、3;另外SH79F9476还集成了4096字节RAM、64K程序存储Flash块。

1. 规格

  • FlashROM:64K
  • RAM: 内部256字节,外部4096字节,LED RAM32字节,touchkey RAM 84字节;
  • 类EEPROM:最大4096字节
  • 工作电压:2.7V-5.5V
  • 振荡:晶振频率:32.768K,内部RC振荡器:24MHz/128K

2. 资源

  • 32/26/18个CMOS 双向I/O管脚
  • I/O内建上拉电阻(32K)
  • 8个大电流驱动I/O(sink)口
  • 20路触摸按键输入
  • 4个16位定时/计数器(T2,T3,T4,T5)
  • 1个16位PCA0,含2个比较/捕捉单元
  • 2路12位PWM定时器
  • TWI接口
  • 内建数字逻辑可配置模块 LCM
  • 3路增加型 UART
  • 9通道12位模数转换器
  • LED驱动器
  • 内建的低电压复位功能
  • 内建CRC校验模块
  • 13档电平可选的低电压检测模块
  • 支持单线仿真和烧写
  • 看门狗定时器WDT
  • 预热计数器

3. 中断源:

    • Timer2,3,4,5,PCA0
    • 外部中断0,2,3
  • 外部中断4:8输入
  • ADC
  • EUART
  • 触摸按键
  • PWM
  • SCM
  • CRC
  • TWI
  • LPD
  • LED

4. 方框图

在这里插入图片描述

5. 封装

  • LQFP32
  • SOP28
  • SOP20

(1)32脚LQFP封装

在这里插入图片描述

(2)28脚SOP封装

在这里插入图片描述

(3)20脚SOP封装

在这里插入图片描述

二、开发环境搭建

1. 安装keil

过程略。

2. 安装中颖keil插件包

到官网:
https://www.sinowealth.com/seach?type_id=68&a_v_type=1
下载Keil 插件集成包:
在这里插入图片描述
安装时需要选择Keil目录 。

3. 调试工具

本系列文章调试工具是中颖 SinoLink,使用SWE方式调试。
在这里插入图片描述

4. 芯片调试引脚说明

调试器引脚 :

  • 第一排 第6引脚(白色倒三角指示位置): VCC
  • 第二排 第1引脚 : GND
  • 第二排 第2引脚 : SWE引脚
    在这里插入图片描述

芯片SWE引脚可在封装引脚图上找到:
在这里插入图片描述

三、系统时钟

1. 振荡器类型

  • 32.768k
  • 内部24M/128K rc振荡器 OSCXCLK
  • 外部时钟源

振荡器的类型选择由代码选项OP_OSC决定 。

下面 OSCCLK指的是从4个可选振荡器中选中的那个振荡器时钟。

  • SH79F9476内置系统时钟分频器。
  • SH79F9476有2个振荡器引脚(XTAL1、XTAL2),可从外部振荡器中产生一种时钟。

系统框图如下:
在这里插入图片描述

  • 当代码选项 OP_OSC 为 0011 , 1010 时, OSCXCLK 为内建 24MHzRC ;

2. 系统时钟控制寄存器

B2H ,Bank0第7 位第6 位第5 位第4 位第3 位第2 位第1 位第0 位
CLKCON32k_SPDUPCLKS1CLKS0SCMIFHFONFS--
读/ 写读/写读/写读/写读/写读/写--
t复位值(POR/WDT/LVR/PIN)111000--

其中:

32k_SPDUP:32.768kHZ晶振加速位
  • 0: 32.786kHz常规模式,由软件清0 ;
  • 1: 32.768kHz振荡器加速模式,由软件或硬件置1.

系统复位时,这一位自由由硬件置1.

关闭加速模式可以节电,当代码选项: OP_OSC为1010时此控制位才有效。

CLKS[1:0] 系统时钟频率分频器
  • 00: f S Y S = f O S C S f_{SYS} = f_{OSCS} fSYS=fOSCS
  • 01: f S Y S = f O S C S / 2 f_{SYS} = f_{OSCS}/2 fSYS=fOSCS/2
  • 10: f S Y S = f O S C S / 4 f_{SYS} = f_{OSCS}/4 fSYS=fOSCS/4
  • 11: f S Y S = f O S C S / 12 f_{SYS} = f_{OSCS}/12 fSYS=fOSCS/12

如果选择 32.768kHz振荡器为OSCSCLK,此控制位无效。

HFON OSCXCLK开关控制寄存器
  • 0:关闭OSCXCLK
  • 1:打开OSCXCLK
    代码选项OP_OSC为0011、1010时(选择32.768kHz晶振或128K内部RC振荡器)此控制位有效。
FS 频率选择位
  • 0:选择32.768kHz / 128kHz为OSCSCLK
  • 1: 选择OSCXCLK为OSCSCLK
    代码选项OP_OSC为0011、1010时(选择32.768kHz晶振或128K内部RC振荡器)此控制位有效。

3. 设置系统时钟

官方demo给了两种个设置频率的示例,

(1)设置高频


void SetClk()
 {
 	  // 00001000
	  CLKCON =0x08;
	  Delay();
	  // 00000100
	  CLKCON|=0x04;
 }

(2)设置低频

void SetClk(){
	// 11111011
	  CLKCON &=0xFB;	  //设置FS为0,选择OSC1CLK为系统时钟
	  // 选择晶振预热
	  _nop_();
	  // 11110111
	  CLKCON &=0xF7;      //关闭高频时钟OSC2CLK
	  _nop_();
	  _nop_();
	  _nop_();
	  _nop_();
	  // 10011111
	  CLKCON &=0x9F;	  //关闭分频  Fsys=Fosc
}

示例代码中使用宏来选择设置的频率。

4. 实验代码

(1)sysclk_define.h

/************************* for SH79F9476*************************************************************************/
//#define	HIGH_FREQUENCE
#define LOW_FREQUENCE
//#define  Half_VDD
/*****************************************************************************************************************/

(2)main.c


#include "SH79F9476.h"
#include "api_ext.h"
#include "cpu.h"
#include "sysclk_define.h"

void Sysclk_Test()
{
  P1CR |=0x01;    //配置Port P1端口的bit0为输出模式 
  P1_0 = 0;       //控制P1_0pin输出低电平
  #ifdef Half_VDD
    P0V0=0x0f;
  #endif
  SetClk(); 
  while(1)	      //控制P0_0pin翻转测试系统clk
  {
    P1_0=~P1_0;
  }
}

void main()
{
  Sysclk_Test();
	while(1);
}

5. 编译运行

1. 高频运行

(1)sysclk_define.h 里设置:
/************************* for SH79F9476*************************************************************************/
#define	HIGH_FREQUENCE
//#define LOW_FREQUENCE
//#define  Half_VDD
/*****************************************************************************************************************/
(2)keil设置

在Options for Target里的 Utilities,点击: Settings。
在这里插入图片描述

如下图所示,选择OSC1为内部24MRC,OSC2禁用。在这里插入图片描述

编译、烧写、运行程序,在P1.0引脚使用示波器观察输出频率。
在这里插入图片描述

高频:实测波形 1.72M左右

2.频率计算公式

由于 C 程序中 IO 翻转一次需要 7 个时钟周期,所以 IO 翻转产生的方波频率应为:
f = F s y s / ( 7 ∗ 2 ) f=F_{sys}/(7*2) f=Fsys/(72),Fsys 为当前选中的低频或者高频时钟。
上面的 24M/(7*2),结果1.72M左右。

3. 低频运行

选择频率:
修改频率预定义宏:

// #define	HIGH_FREQUENCE
#define LOW_FREQUENCE

类似的,选择OP_OSC为:
在这里插入图片描述
在这里插入图片描述
实测频率 9.09K左右。

四、I/O 端口

为便于测试,上面代码对P1.0 IO口进行操作,这里简要说明 ,后续章节再进行详细介绍。

PxCR 是控制端口输入/输出的寄存器,代码中:

  P1CR |=0x01;    //配置Port P1端口的bit0为输出模式 

用来设置端口为输出状态,这里的P1.0即下图所示引脚:
在这里插入图片描述

代码:

  P1_0 = 0;       //控制P1_0pin输出低电平

用来控制端口输出低电平。

本文代码开源在:
https://gitee.com/xundh/learn-sinowealth-51

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1568704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙实战开发:【实现应用悬浮窗】

如果你要做的是系统级别的悬浮窗&#xff0c;就需要判断是否具备悬浮窗权限。然而这又不是一个标准的动态权限&#xff0c;你需要兼容各种奇葩机型的悬浮窗权限判断。 fun checkPermission(context: Context): Boolean if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)…

江大白 | 万字长文,近3年Transformer在小目标检测领域,进展与突破系统梳理!

本文来源公众号“江大白”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;万字长文&#xff0c;近3年Transformer在小目标检测领域&#xff0c;进展与突破系统梳理&#xff01; 以下文章来源于微信公众号&#xff1a;AI视界引擎 …

WEB漏洞挖掘详细教程--用户输入合规性(sql注入测试)

前置教程&#xff1a;WEB漏洞挖掘&#xff08;SRC&#xff09;详细教程--信息收集篇-CSDN博客 WEB漏洞挖掘&#xff08;SRC&#xff09;详细教程--身份认证与业务一致性-CSDN博客 WEB漏洞挖掘&#xff08;SRC&#xff09;详细教程--业务数据篡改-CSDN博客 2.4 用户输入合规性…

C#学生信息管理系统

一、引言 学生信息管理系统是现代学校管理的重要组成部分&#xff0c;它能够有效地管理学生的基本信息、课程信息、成绩信息等&#xff0c;提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。 二、项…

risc-v向量扩展strlen方法学习

riscv向量文档中给出了strlen的实现&#xff0c; 大概是这么一个思路&#xff0c; 加载向量: 使用向量加载指令&#xff08;如 vload&#xff09;从内存中加载一个向量长度的字符。比较向量与零: 使用向量比较指令&#xff08;如 vmask 或 vcmpeq&#xff09;来检查向量中的每…

HTTPS RSA 握手解析(计算机网络)

传统的 TLS 握手基本都是使用 RSA 算法来实现密钥交换的&#xff0c;在将 TLS 证书部署服务端时&#xff0c;证书文件其实就是服务端的公钥&#xff0c;会在 TLS 握手阶段传递给客户端&#xff0c;而服务端的私钥则一直留在服务端。 在 RSA 密钥协商算法中&#xff0c;客户端会…

【generate】如何维护一套icon组件库,直接输出svg为react component

https://github.com/ant-design/ant-design-web3/pull/761/files 实现了icon-preview(通过jsdoc, 鼠标放在组件上可以看到icon的样式)&#xff0c;因为打包方式、产物以及命名上有一些不同&#xff0c;可能需要稍加改造。 这个同步脚本应该后续也用得上&#xff0c;略加改造同步…

装饰工程管理系统|基于Springboot的装饰工程管理系统设计与实现(源码+数据库+文档)

装饰工程管理系统-项目立项子系统目录 目录 基于Springboot的装饰工程管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 &#xff08;2&#xff09;合同报价管理 &#xff08;3&#xff09;装饰材料总计划管理 &#xff08;4&#xff0…

深度解析GPT中的Tokenizer

继学习完深度解析大语言模型中的词向量后&#xff0c;让我们继续学习大语言模型中另外几个重要概念&#xff1a;token&#xff08;词元&#xff09;、tokenization&#xff08;词元化&#xff09;、tokenizer&#xff08;词元生成器&#xff09;。 在GPT模型中&#xff0c;toke…

Minikube本地搭建单节点Kubernetes集群

1、什么是 Minikube Minikube 是一个开源工具&#xff0c;旨在为开发者提供一种便捷的方式在本地环境中搭建单节点的 Kubernetes 集群。它主要用于开发、测试和学习 Kubernetes 应用程序&#xff0c;无需依赖大型的硬件资源或复杂的多节点集群配置。minikube 使用轻量级虚拟化技…

小林coding图解计算机网络|基础篇02|键入网址到网页显示,期间发生了什么?

小林coding网站通道&#xff1a;入口 本篇文章摘抄应付面试的重点内容&#xff0c;详细内容还请移步&#xff1a;小林coding网站通道 文章目录 孤单小弟——HTTP真实地址查询——DNS指南好帮手——协议栈可靠传输——TCP远程定位——IP两点传输——MAC出口——网卡送别者——交…

如何优化TCP?TCP的可靠传输机制是什么?

在网络世界中&#xff0c;传输层协议扮演着至关重要的角色&#xff0c;特别是TCP协议&#xff0c;以其可靠的数据传输特性而广受青睐。然而&#xff0c;随着网络的发展和数据量的激增&#xff0c;传统的TCP协议在效率方面遭遇了挑战。小编将深入分析TCP的可靠性传输机制&#x…

CentOS7安装MySQL8.0.28(持续)

第一步 &#xff1a;下载mysql MySQL https://www.mysql.com/

【剑指offr--C/C++】JZ59 滑动窗口的最大值

一、题目 二、思路及代码 暴力解法是依次往后滑动一位&#xff0c;然后比较窗口内的值。 我这里考虑&#xff1a;窗口每次往后移动一位&#xff0c;那么如果当前窗口的最大值max在窗口内部&#xff0c;那么再滑动到下一个窗口的时候&#xff0c;窗口内只有最新进来的一个元素没…

操作系统导论课后作业-第十七章答案

课程作业-第十七章&#xff1a; 17.1首先以标志flag -n 10 -H 0 -p BEST -s 0运行程序来产生一些随机的分配和空闲。你能预测malloc()/free()会返回什么吗&#xff1f;你可以在每次请求后猜测空闲列表的状态吗&#xff1f;随着时间的推移&#xff0c;你对空闲列表有什么发现&a…

Windows 11安装kb5035853补丁时,提示错误0x800f0922,并且弹出“某些操作未按计划进行,不必担心,正在撤消更改。请不要关机”

Windows 11安装kb5035853补丁时&#xff0c;提示错误0x800f0922&#xff0c;并且还在重启后弹出“某些操作未按计划进行&#xff0c;不必担心&#xff0c;正在撤消更改。请不要关机”&#xff0c;按微软官方的作法是&#xff1a;https://learn.microsoft.com/zh-cn/windows/rel…

同态加密算法的概念与应用

同态加密算法的基本概念 同态加密算法是一种特殊的加密算法&#xff0c;允许对加密状态下的数据进行计算&#xff0c;得到的结果仍然是加密的状态&#xff0c;而不是解密后的明文。同态加密算法的核心原理是将明文数据映射到一个特定的数学空间中&#xff0c;在该数学空间中实…

mac电脑安装redis教程

1、下载地址 Download | RedisRedisYou can download the last Redis source files here. For additional options, see the Redis downloads section below.Stable (7.2)Redis 7.2 …https://redis.io/download/#redis-downloads 2、安装 2.1 解压下载后的压缩文件 2.2 进入…

基于 Docker 的 go grpc quickstart

工作之后一直使用的 RPC 框架是 Apache 的 thrift&#xff0c;现在发现 grpc 更流行&#xff0c;所以也要学习一下&#xff0c;先来简单的跑一下 demo。在本地安装运行也很方便&#xff0c;不过因为有了 docker&#xff0c;所以在 docker 里面安装运行隔离性更好&#xff0c;顺…

构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Servi…