0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【中科昊芯Start_DSC28027勇士开发板试用体验】计时器

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-21 11:08 次阅读

本文来源电子发烧友社区,作者:xiaopeng, 帖子地址:https://bbs.elecfans.com/jishu_2290500_1_1.html

计时器演示

一、说明

勇士开发板上有一个四位共阴数码管,于是想着能用它来显示点什么,想了一下,也没什么可以显示的,只好用它来做个计时器,因为只有四位,也不可能显示很复杂的内容。

四位数码管如果同时显示分钟和秒中,正好可以用前两位显示分钟,后两位显示秒中,那么可以最大显示99分钟59秒。想好了就开始干。

二、方案设计

1、查看原理图

图片.png

从原理图可以看出,开发板使用了一颗I2C接口的数码管驱动芯片TM1650,驱动芯片与DSP之间只需要两个IO口就可以实现数码管的控制,还是非常方便的。
另外,该芯片通过读的方式能够检测外部的按键。

2、TM1650介绍

TM1650是一款国产4位共阴数码管驱动芯片,它还带有矩阵按键扫码功能。它的基本参数如下:

  • 工作电压:3~5V
  • 数码管驱动模式:8段x4位共阴数码管
  • 矩阵按键驱动模式:7x4矩阵按键,不支持组合键
  • 通信接口:类IIC,使用了IIC相同的时序,但没有完全遵守IIC的协议,不带从机地址

引脚定义

SCL:串行通信时钟线

SDA:串行通信数据线

做数码管驱动使用时

  • DIGx:数码管的位选引脚,灌电流驱动,最大可吸收150mA电流

  • A~DP:数码管的段驱动引脚,拉电流驱动,最大可输出25mA电流
    图片.png

    通信协议

TM1650使用的是类IIC接口,只是不带从机地址机制。所以总线上的基本信号也包含起始信号,ACK应答,结束信号,同时字节数据发送时,也是按照标准IIC的MSB First顺序。

发送命令设置数码管显示工作参数

通信格式:起始信号,模式命令(1字节),显示命令(1字节),结束信号

这个指令用于设置数码管显示的相关参数。例如亮度,7段或者8段显示,显示的开关。模式命令固定为0x48,而显示命令则满足以下格式:
图片.png

3、设计思路

计时:因为勇士027系列dsp没有硬件RTC模块,所以只能使用硬件定时器来实现。使用cputimer0来设置1ms的周期中断,在中断里面进行计数,计数到1s后进行更新数码管显示。

暂停功能:利用按键s101来实现计数的暂停与继续。

亮度调节功能:利用按键s102来实现数码管亮度的调节

计数复位功能:利用按键s103来实现计数值的复位,从零开始计时

三、代码编写

main.c

#include "dsc_config.h"
#include 
#include "IQmathLib.h"
#include "sci.h"
#include "TM1650_IIC.h"
#include 

extern void InitKEY(void);
extern void InitLED(void);
void test(void);
Uint16 sec_rtc = 0;
Uint16 min_rtc = 0;
char keyReg = 0;

extern Uint32 msec_cnt;//用于计秒
extern volatile Uint8 msec_cnt_on;//0-on,1-off
int main(void)
{
	uint16_t cnt = 0;

	/*初始化系统控制:PLL,WatchDog,使能外设时钟*/
	InitSysCtrl();
	/*初始化内存控制寄存器,使能内存流水线模式*/
	InitFlash();

	/*初始化串口通信的GPIO口*/
	/*GPIO28: SCIRXDA*/
	/*GPIO29: SCITXDA*/
	InitSciGpio();

	/*关闭中断*/
	DINT;

	/*将PIE控制寄存器初始化为默认状态,该状态禁止所有PIE中断并清除所有标志*/
	InitPieCtrl();
	/*禁止CPU中断并清除所有中断标志*/
	IER = 0x0000;
	IFR = 0x0000;
	/*初始化PIE向量表,为PIE向量表中的所有中断向量配置对应向量的入口地址*/
	InitPieVectTable();
	/*SCI寄存器配置*/
	Scia_Config(9600);
	/*定时器0初始化*/
	Timer0_init();

	/*初始化IIC总线的Gpio*/
	InitI2C_Gpio();
	/*IIC初始化*/
	I2CA_Init();
	/*软件复位IIC从设备*/
	softResetIIC_BUS();
	//printf("\r\nTM1650 init...");//标准C的printf输出测试,串口调试助手设置波特率128000bps,ASCII格式显示

	/*BIT6到BIT4为亮度调节,BIT0是  1 开启/0关闭*/
	LigntVal = 0x11;
	/*1级亮度,开启显示*/
	TM1650_Send(CMD_SEG, LigntVal);
	/*DIG0-DIG3均显示0*/
	TM1650_Send(DIG0, SEG7Table[0]);
	TM1650_Send(DIG1, SEG7Table[0]);
	TM1650_Send(DIG2, SEG7Table[0]);
	TM1650_Send(DIG3, SEG7Table[0]);

	/*使能外部中断和CPU中断*/
	EINT;

	/*初始化KEY、LED*/
	InitKEY();
	InitLED();

	/*通过SCI发送字符串*/
	Scia_Print("Hello haawking!\r\n");
	while(1)
	{
		if((CpuTimer0.InterruptCount % 250) == 0)
		{
			/*TM1650获取扫描按键S101 S102 S103,控制数码管数字显示及亮度调节*/
			TM1650_Read(CMD_KEY, &keyVal);

			/*S101按下时,开始/暂停计时*/
			if(keyVal == 0x44)
			{
				msec_cnt_on ^= 0x01;
				uart_printf("msec_cnt_on = %d\r\n",msec_cnt_on);
			}
			/*S102按下时,改变数码管显示亮度*/
			if(keyVal == 0x4c)  //
			{
				/*高四位为亮度调节,最后1位是开启、关闭显示*/
				LigntVal = (LigntVal + 0x20) & 0x7F;

				/*1级亮度,开启显示*/
				TM1650_Send(CMD_SEG, LigntVal);
				uart_printf("LigntVal = %d\r\n",LigntVal);
			}

			/*按下S103时*/
			if(keyVal == 0x54)
			{
				msec_cnt = 0;
				sec_rtc = 0;
				min_rtc = 0;
				keyReg = 0;

				/*DIG0-DIG3清零*/
				TM1650_Send(DIG0,SEG7Table[0]);
				TM1650_Send(DIG1, SEG7Table[0]);
				TM1650_Send(DIG2, SEG7Table[0]);
				TM1650_Send(DIG3, SEG7Table[0]);

				/*D400翻转*/
				GpioDataRegs.GPATOGGLE.bit.GPIO7 = 1;
				uart_printf("cnt reset\r\n");
			}
		}

		/*间隔为1000ms*/
		if(msec_cnt >= 1000)
		{
			/*定时器0中断次数清零*/
			msec_cnt = 0;

			/*D401翻转*/
			GpioDataRegs.GPATOGGLE.bit.GPIO6 = 1;

			/*Tmp累加,从0-999循环*/
			sec_rtc++;
			if(sec_rtc >= 60)
			{
				sec_rtc = 0;
				min_rtc++;
				if(min_rtc >= 100)
				{
					min_rtc = 99;
					sec_rtc = 59;
				}

			}

			//分钟十位
			TM1650_Send(DIG0,SEG7Table[min_rtc / 10]);
			/*分钟各位*/
			TM1650_Send(DIG1, SEG7Table[min_rtc % 10]);

			/*秒十位*/
			TM1650_Send(DIG2, SEG7Table[sec_rtc / 10]);
			/*秒个位*/
			TM1650_Send(DIG3, SEG7Table[sec_rtc % 10]);
		}
	}

	return 0;
}

// ----------------------------------------------------------------------------

timer.c

/******************************************************************
 文 档 名:     epwm.c
 D S P:       DSC28027
 使 用 库:
 作     用:
 说     明:      提供timer接口初始化配置
 ---------------------------- 使用说明 ----------------------------
 功能描述:


 版 本:V0.0.3
 时 间:2022年1月19日
 作 者:
 @ mail:support@mail.haawking.com
 ******************************************************************/
#include "dsc_config.h"
#include "TM1650_IIC.h"
#include "timer.h"

timer0 timer0Base;
volatile uint32_t Tick;
Uint32 msec_cnt = 0;//用于计秒
volatile Uint8 msec_cnt_on = 0;//0-on,1-off
/******************************************************************
 *函数名:Timer0_init
 *参 数:无
 *返回值:无
 *作 用:初始化Timer
 ******************************************************************/
void Timer0_init()
{
	/*初始化Cpu定时器*/
	InitCpuTimers();

	/*开启模块中断使能,位于 Timer->RegsAddr->TCR.bit.TIE = 1;
	 120MHz,1000us ,即为 1ms中断周期*/
	ConfigCpuTimer(&CpuTimer0, 120, 1000);
	/* 使能中断*/
	CpuTimer0Regs.TCR.bit.TIE = 1;
	/* 开始计时*/
	CpuTimer0Regs.TCR.bit.TSS = 0;

	/*重映射中断服务函数*/
	EALLOW;
	PieVectTable.TINT0 = &cpu_timer0_isr;
	EDIS;
	/*连接CPU中断Y*/
	IER |= M_INT1;
	/*连接Y中断里的第几位*/
	PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
}
/******************************************************************
 *函数名:INTERRUPT void cpu_timer0_isr(void)
 *参 数:无
 *返回值:无
 *作 用:CPU 定时器0 中断服务函数
 ******************************************************************/

INTERRUPT void cpu_timer0_isr(void)
{
#if 0
	timer0Base.msCounter++;
	timer0Base.Mark_Para.Status_Bits.OnemsdFlag = 1;

	Tick++;
	/*中断响应*/
	EALLOW;
	PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
	EDIS;

#endif

	/*定时器0中断次数累计*/
	CpuTimer0.InterruptCount++;
	if(msec_cnt_on == 0)
	{
		msec_cnt++;
	}

	/*检测IIC模块状态为空闲还是写入*/
	char i;

	for(i = 0; i < IIC_NODE_NUM; i++)
	{
		PtrMsg[i]->IIC_TimerOUT = (PtrMsg[i]->MasterStatus == IIC_IDLE) ? 0 : (PtrMsg[i]->IIC_TimerOUT + 1);
	}

	/*通知可以接收第一组中断的所有中断*/
	PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计时器
    +关注

    关注

    1

    文章

    418

    浏览量

    32630
  • 中科昊芯
    +关注

    关注

    5

    文章

    79

    浏览量

    5143
  • 开发板试用
    +关注

    关注

    3

    文章

    301

    浏览量

    2038
收藏 人收藏

    评论

    相关推荐

    【迅为】瑞微RK3588开发板RK3568开发板区别及优势

    RK3568开发板
    的头像 发表于 11-18 14:19 140次阅读
    【迅为】瑞<b class='flag-5'>芯</b>微RK3588<b class='flag-5'>开发板</b>RK3568<b class='flag-5'>开发板</b>区别及优势

    【RA8D1试用活动】RA8D1B-CPKCOR开发板移植linux

    【RA8D1试用活动】RA8D1B-CPKCOR开发板移植linux
    的头像 发表于 11-16 01:02 108次阅读
    【RA8D1<b class='flag-5'>试用</b>活动】RA8D1B-CPKCOR<b class='flag-5'>开发板</b>移植linux

    有奖丨米尔 瑞微RK3576开发板免费试用

    米尔与瑞微合作发布的新品基于瑞微RK3576应用处理的MYD-LR3576开发板免费试用活动来啦~~米尔提供了7块价值849元的MYD
    的头像 发表于 11-12 01:00 150次阅读
    有奖丨米尔 瑞<b class='flag-5'>芯</b>微RK3576<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    有奖试用!!RA-Eco-RA4E2-64PIN-V1.0开发板试用活动开始报名

    有奖试用!!RA-Eco-RA4E2-64PIN-V1.0开发板试用活动开始报名
    的头像 发表于 11-09 01:02 115次阅读
    有奖<b class='flag-5'>试用</b>!!RA-Eco-RA4E2-64PIN-V1.0<b class='flag-5'>开发板</b><b class='flag-5'>试用</b>活动开始报名

    中科受邀参加中关村科技沙龙,争当科技成果转化排头兵

    近日,中科副总经理吴军宁及人力行政部经理吴丹受邀出席了中关村科技联盟举办的第二期科技沙龙活动。为中关村街道及自动化所领导详细汇报了中科
    的头像 发表于 09-25 08:00 344次阅读
    <b class='flag-5'>中科</b><b class='flag-5'>昊</b><b class='flag-5'>芯</b>受邀参加中关村科技沙龙,争当科技成果转化排头兵

    喜报!中科荣获国家级专精特新“小巨人”企业称号

    喜讯!近日,国家工业和信息化部门正式揭晓了第六批国家专精特新“小巨人”企业名单,中科凭借卓越的技术实力和创新能力,荣获了专精特新“小巨人”企业殊荣。这一荣誉不仅是对中科
    的头像 发表于 09-14 08:00 600次阅读
    喜报!<b class='flag-5'>中科</b><b class='flag-5'>昊</b><b class='flag-5'>芯</b>荣获国家级专精特新“小巨人”企业称号

    LMC555 CMOS计时器数据表

    电子发烧友网站提供《LMC555 CMOS计时器数据表.pdf》资料免费下载
    发表于 08-20 09:16 0次下载
    LMC555 CMOS<b class='flag-5'>计时器</b>数据表

    双路精密计时器选购指南:准确选择,高效工作

    在快节奏的现代生活中,准确的时间管理对于个人和团队的成功至关重要。双路精密计时器作为一种高效的计时工具,受到了越来越多人的青睐。那么,如何选购一款适合自己的双路精密计时器呢?本文将为您提供一份详尽
    的头像 发表于 06-26 16:06 320次阅读

    点击参与米尔NXP i.MX 93开发板有奖试用

    米尔与NXP合作发布的新品基于NXPi.MX93应用处理的MYD-LMX9X开发板免费试用活动来啦~~米尔提供了3块价值678元的MYD-LMX9X开发板发起
    的头像 发表于 06-13 08:02 462次阅读
    点击参与米尔NXP i.MX 93<b class='flag-5'>开发板</b>有奖<b class='flag-5'>试用</b>

    免费!NXP i.MX 93开发板有奖试用

    米尔与NXP合作发布的新品基于NXPi.MX93应用处理的MYD-LMX9X开发板免费试用活动来啦~~米尔提供了2块价值678
    的头像 发表于 05-23 08:01 668次阅读
    免费!NXP i.MX 93<b class='flag-5'>开发板</b>有奖<b class='flag-5'>试用</b>

    fpga开发板与linux开发板区别

    FPGA开发板与Linux开发板是两种不同的硬件开发平台,各自具有不同的特点和应用场景。在以下的文章中,我将详细介绍FPGA开发板和Linux开发板
    的头像 发表于 02-01 17:09 2067次阅读

    大联大推出基于中科蓝讯产品的蓝牙音箱开发板方案

    2024年1月9日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布其旗下世平推出基于中科蓝讯(Bluetrum)AB5301A的蓝牙音箱开发板方案。
    的头像 发表于 01-12 10:44 959次阅读
    大联大推出基于<b class='flag-5'>中科</b>蓝讯产品的蓝牙音箱<b class='flag-5'>开发板</b>方案

    使用爱派Pro开发板部署人体姿态估计模型

    在经过之前对于开发板的使用,以及通过几个爱派官方给出的示例demo(mobilenet/yolov5)在开发板上的部署之后,笔者也逐渐了解了爱派这块
    的头像 发表于 01-09 09:50 1360次阅读
    使用爱<b class='flag-5'>芯</b>派Pro<b class='flag-5'>开发板</b>部署人体姿态估计模型

    中科完成Pre-B轮融资,用于DSP产品研发等

    作为中科院科技成果的转换企业,中科以开源指令集risc-v为基础,制造了多系列数字信号处理产品,构建了完善的处理
    的头像 发表于 12-06 14:39 1266次阅读

    明德扬PCIE开发板系列XILINX-K7试用体验-第二篇

    本文为明德扬原创文章,转载请注明出处!作者:Vito 明德扬PCIE开发板系列XILINX-K7试用体验-第二篇 第二周的试用计划是实现常见低速协议(UART,I2C,SPI)的FPGA工程,记录
    的头像 发表于 11-29 15:39 3217次阅读
    明德扬PCIE<b class='flag-5'>开发板</b>系列XILINX-K7<b class='flag-5'>试用</b>体验-第二篇