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

    文章

    435

    浏览量

    35436
  • 中科昊芯
    +关注

    关注

    5

    文章

    85

    浏览量

    6049
  • 开发板试用
    +关注

    关注

    3

    文章

    303

    浏览量

    2806
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【获奖名单】2025开发板评测大赛优秀开发者、最受欢迎开发板公布

    各位发烧友们,大家好!2025开发板试用评测大赛已圆满落幕。经过厂商与发烧友平台的共同评选,优秀作品及人选名单现已评选完成,共选出24位优秀作品开发者,被评选上的用户将获得荣誉证书。各工程师参与完
    发表于 11-21 09:31

    【作品合集】中科Core_DSC280025C开发板测评

    Core_DSC280025C开发板试用体验】+3.DSP基础外设调试(含源码) 作者:安安踢球球【中科
    发表于 09-18 10:52

    【作品精选】2025电子发烧友开发板测评大赛作品合集!

    Milk-V Duo S 开发板免费试用 玄铁Banana Pi BPI-RV2开发板试用 玄铁Banana Pi BPI-CanMV-K230D-Zero17
    发表于 09-03 15:24

    中科Core_DSC280025C开发板的外部中断问题

    获得中科Core_DSC280025C开发板开发板后,我就抓紧时间研究,无奈学识浅薄,学得很
    发表于 08-08 22:06

    中科Core_DSC280025C开发板试用体验】---LED闪烁灯

    中科Core_DSC280025C开发板试使用了
    发表于 08-07 11:51

    [经验] 【中科Core_DSC280025C开发板试用体验】---模拟SPI及定时的应用

    前言 早就听说中科是一家专注于数字信号处理(DSP)领域的创新企业,其产品在工业控制、新能源汽车、光伏储能等领域有广泛应用。于是抱着试试看的心理申请了
    发表于 08-07 11:07

    中科Core_DSC280025C开发板试用体验】+4. CAN外设调试(含源码)

    前言 大家好,非常感谢电子发烧友与中科提供的DSC280025C开发板,这是一款DSP的开发板
    发表于 08-05 20:46

    中科Core_DSC280025C开发板试用体验】+SCI测试与代码解读

    Core_DSC280025C核心使用了HXS320F28025CRISC-V DSP芯片,该芯片集成了吴自主研发的H28x内核。核
    发表于 07-17 10:42

    中科Core_DSC280025C开发板试用体验】+3.DSP基础外设调试(含源码)

    前言 大家好,非常感谢电子发烧友与中科提供的DSC280025C开发板,这是一款DSP的开发板
    发表于 07-13 16:07

    有奖丨米尔 瑞微RK3506开发板免费试用来啦!

    米尔与瑞微合作发布的新品基于瑞微RK3506应用处理的MYD-YR3506开发板免费试用名额增加啦
    的头像 发表于 07-10 08:03 1310次阅读
    有奖丨米尔 瑞<b class='flag-5'>芯</b>微RK3506<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>来啦!

    中科Core_DSC280025C开发板试用体验】+2.RAM工程与FLASH工程对比

    前言 大家好,非常感谢电子发烧友与中科提供的DSC280025C开发板,这是一款DSP的开发板
    发表于 07-04 10:37

    中科Core_DSC280025C开发板试用体验】+1.开箱之浮点计算对比

    中科Core_DSC280025C开发板试用体验】+1.开箱之浮点计算对比 前言 大家好,
    发表于 06-29 10:01

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

    米尔与瑞微合作发布的新品基于瑞微RK3506应用处理的MYD-YR3506开发板免费试用名额来啦~~米尔提供了3块价值299元的MYD
    的头像 发表于 06-19 08:04 1372次阅读
    有奖丨米尔 瑞<b class='flag-5'>芯</b>微RK3506<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    有奖丨米尔 瑞微RK3562开发板免费试用新增名额!

    米尔与瑞微合作发布的新品基于瑞微RK3562应用处理的MYD-YR3562开发板免费试用名额增加
    的头像 发表于 06-13 08:04 2170次阅读
    有奖丨米尔 瑞<b class='flag-5'>芯</b>微RK3562<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>新增名额!

    中科Core_DSC280025C开发板免费试用

    Core_DSC280025C核心使用了HXS320F28025C RISC-V   DSP芯片,该芯片集成了吴自主研发的H28x内
    的头像 发表于 06-03 19:30 1486次阅读
    <b class='flag-5'>中科</b><b class='flag-5'>昊</b><b class='flag-5'>芯</b>Core_<b class='flag-5'>DSC</b>280025C<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>