关于海速芯(十速)TM56M1522的粗浅使用心得及资料

前言

百度链接:

链接: https://pan.baidu.com/s/1M_UwCi4RASzla_WUi-JhSA?pwd=enyd

提取码: enyd 

资料可自行搜索官网免费下载

我这边主要用它做pwm/adc相关的产品研发

新建工程:

1/安装环境:请在资料包中找到该文件:开发环境破解版本HI-TECH PICC9.83进行安装

2/环境使用说明:TICE99IDE_SV11编辑器使用说明

3/安装好后,

(1)设置语言:

(2)新建工程:file->New->Project(文件->新建->工程)

(3)选择对应芯片,右侧会有相应描述,我选择的是既可以C编辑,也可以汇编的。工程名不能超过36字节;工程路径名中不能有  含有空格的文件名。其他默认直接确定即可。

(4)接下来复制几个文件到工程文件夹中(资料包中找到例程文件:固件例程TM56M1522_STDIOKIT_v_0_0_6);随意点进去一个文件把红框里的文件复制到新建工程文件夹中。

tenx_TM56M1522.h:所有寄存器的库函数文件

TM56M1522_sfr_config.h:寄存器名的宏参

TM56M1522_bsp.c:延时函数/时钟初始化函数

TM56M1522_bsp.h:函数申明头文件

TM56M1522_OT.h:一些参数名称简化定义

(5)主函数中 将头文件:tenx_TM56M1522.h,TM56M1522_bsp.h包含进去即可

(6)点击下面图标进行工程设置(工程-->工程设置)

选择好路径后,点击Add添加,然后‘OK’。还有个头文件路径在新建工程文件中

主板供电:我选的3V

找到这个文件就设置完成了

*(7)接下来就可以根据自己的需求编写程序了;(可以在固件例程文件中找程序进行模仿:TM56M1522_STDIOKIT_v_0_0_6)

注:(针对TM56M1522,其他的请仔细阅读芯片规格书)主函数里面需要设置

//main function
void main(void)
{
  RDCTL |= 0x03; // 程序 ROM 的读信号延迟控制;
  //用户必须将该寄存器切换到“8ns”,
  //以提高最低工作电压的性能
  while(1)
  {
    
  }
}
①系统时钟配置
//------------------------------------------------- 
//系统时钟使用内部RC16MHz快速时钟
//div:系统分频00:8分频  01:4分频 02:2分频  03:1分频 
//------------------------------------------------- 
void Sys_Init(unsigned char div )
{
   FASTSTP=0;   //启动快时钟
   asm("nop");
   asm("nop");
   asm("nop");
   CPUCKS=1;    //切换到快时钟
   asm("nop");
   CPUPSC = div;//系统时钟分频 
   asm("nop");
}
②GPIO初始化
//------------------------------------------------
//GPIO初始化PB5 CMOS输出模式 
//------------------------------------------------
void GPIO_Init(void)
{
  PA0MOD = 2; //PA0 推挽输出
  PAD0 = 0;//输出di   
} 
③PWM
/**********************************************************************************************************
**函数名称:pwm_init()
**函数描述:pwm设置 
**输入    :①周期:r_g_b_prd ②占空比:duty
**输出    :None
**
**PWM时钟=16M;
**PWM周期= r_g_b_prd;
**PWM占空比= duty; 
**PWM输出频率=16 MHz / (周期+1) = 16 MHz / 32768 = 488 Hz 
**PWM输出占空比 = 占空比 / (周期+1) = 50%
**********************************************************************************************************/
void pwm_init(unsigned int r_g_b_prd, unsigned int duty)
{
    PA4MOD = 7; //PA4 PWM0P 
    PAD4 = 1;//输出高

    PWMIE = 0;   //关闭PWM中断 
    PWMCKS = 2;  //PWM clock source :FIRC:16Mhz
    PWM0OM  = 0;  //PWM输出模式选择0 
    PWM0DZ  = 0;  //没有非重叠
    PWMEN  = 1;  //PWM0~5  disable   enable 
    
    PWMPRDL  = r_g_b_prd & 0xff;   //  PWMPRDL 周期低字节 
    PWMPRDH  = r_g_b_prd >> 8; 	   //  PWMPRDH 周期高字节

    PWM0DL = duty & 0XFF;   //  PWM4DL占空比低字节
    PWM0DH = duty >> 8;   //  PWM4DH 
}
④ADC
/****************************************************************
**ADC模式初始化(12bit)
	[CPU 运行在快速模式 , Fsys = FIRC 16 MHz ]
	ADC 时钟频率 = 1 MHz, 
	ADC 通道 = ADC1 (PA1)
	ADC 参考电压vcc
****************************************************************/
void IO_ADC1_PA1_Init(void)
{
  ADCIE = 0;  //关闭ADC中断
  ADCKS = 4;  //Fsys/16分频,ADC时钟要<=1Mhz

  ADVREFS = 0;//参考电压vcc
			
  PA1MOD = 3; //IO口模拟输入模式	 
}

//------------------------------------------------
//	获取ADC数据 ,返回读取到的数据 (12bit)
/*
	00000: ADC0 (PA0) 01000: ADC8 (PB1) 
	00001: ADC1 (PA1) 01001: ADC9 (PB2) 
	00010: ADC2 (PA2) 01010: ADC10 (PB4)
	00011: ADC3 (PA3) 01011: ADC11 (PB5)
	00100: ADC4 (PA4) 01100: ADC12 (PB6)
	00101: ADC5 (PA5) 01110: VBG
	00110: ADC6 (PA6) 10111: 1/4 VCC
	00111: ADC7 (PB0) others: 保留
*/
//------------------------------------------------
unsigned int Get_ADC(unsigned char ch )
{
   unsigned int dat=0;
   unsigned char temp =0;
   ADCHS = ch;    //通道选择 
   ADST = 1;    //启动ADC 
   while( ADST ); //等待ADC转换完成
   dat = ADCDH;	//ADC 输出数据位 11~4
   temp = ADCTL>>4;//ADC 输出数据位 3~0
   dat <<= 4;
   dat |= temp;

   return dat;
} 
⑤比较器

/**********************************************************************************************************
**函数名称:isr_rec
**函数描述:中断处理函数 
**输入    :无
**输出    :无
**********************************************************************************************************/
void interrupt isr_rec (void)
{
    if(CMPIF)
    {
        CMPIF = 0;
        LED1 = ~LED1;                 //  1S 变换一次状态 
    } 
}

/**********************************************************************************************************
**函数名称:CMP_init
**函数描述:比较器初始化函数 :PA1>DAC时,CMPOX=1
**输入    :无
**输出    :无
**********************************************************************************************************/
void CMP_init()
{
    PA0MOD = 2;//LED0--PA0 设置为CMOS 
    PAD0 = 1;//输出高 

    PA1MOD = 3;//PAD1设置为模式3-->C1P1;
    PAD1 = 1;

    SVRF = 0;//DAC参考电压选择VCC
    
    SVL = 100;//100/128 * 参考电压 =  100/128 * VCC
    
    SCIP = 0;//比较器 CMPP 外部输入为 CIP1 (PA1)

    /*这里仿真时必须打开*/
    //CMPPNS = (CMPPNS&~CMPPNS_OPOF_MASK) | 1<<CMPPNS_OPOF_POS;//TM56F1552仿真需设置这个bit位。比较器 CMPP 源为外部引脚 (CIPx)

    SCMPN = 1;//1:比较器 CMPN 源为 DAC 输出;  0: 比较器 CMPN 源为外部引脚 (CINx)
    //SCIN = 0; //000:比较器 CMPN 外部输入为 CIN1 (PA3)
     
    CMPDBS = 1;//比较器原始输出 (CMPOX) 去抖时间:4 Fsys
    CMPTRIG = 1;//比较器中断触发模式:下降沿
    PDCMP = 0;//启用比较器和 DAC 
    //CMPOE = 1;//比较器输出 (CMPO) 信号输出到 PA5;  PA5MOD 应设置为 xx10b

    CMPIF = 0 ;//清除比较器中断标志
    CMPIE = 1;//比较器中断启用 
}
⑥定时器
#define LED1  PAD0

unsigned char t100us_cnt = 0;
unsigned char t4ms_cnt = 0;

/**********************************************************************************************************
**函数名称:isr_rec
**函数描述:中断处理函数 
**输入    :无
**输出    :无
**********************************************************************************************************/
void interrupt isr_rec (void)
{
    if(TM0IE && TM0IF)//定时器0 自动重装 
    {
       INTIF = 0b11101111;	//clear Timer0 Interrupt flag
       t100us_cnt++;   
                    // 100US ++
	if (t100us_cnt >= 39)
	{
		t100us_cnt = 0;
		t4ms_cnt++;
		if (t4ms_cnt >= 249)              //  1S
		{
			t4ms_cnt = 0;
			LED1 = ~LED1;                 //  1S 变换一次状态 
		}
	}
    }
}

//TM0 interrupt interval cycle time = Fsys / 2 / TM0PSC / (256-TM0RLD) 
/**********************************************************************************************************
**函数名称:timer0_init(),默认tm0的时钟源为 Fsys / 2
**函数描述:timer0初始化函数 
**输入    :无
**输出    :无
**********************************************************************************************************/
void timer0_init()
{
    TM0PSC = 3;   //8分频 
    TM0RLD = TM0 = 156;// 1 / 16MHZ * 2 * 8 * 100 = 100US
    TM0STP = 0;//tm0运行 
    TM0IE = 1;//使能tm0 

    PA0MOD=2;//LED1 CMOS推挽输出 
    PAD0 = 1;//输出高 
}

其中有问题的仔细阅读芯片参考手册,还是很仔细的。

⑧编译下载仿真

编辑 器左下角框内显示编译下载结果

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值