⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 C
字号:
/****************************************Copyright (c)*****************************************************
**                         Guangzhou ZHIYUAN electronics Co.,LTD.                               
**                                     
**                               http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
**********************************************************************************************************/
#include "main.h"

/**********************************************************************************************************
  TASK0 任务ID、优先级、堆栈设置及函数声明                                
**********************************************************************************************************/
#define TASK0_ID            11                                          /* 任务的ID                      */
#define TASK0_PRIO          TASK0_ID                                    /* 任务的优先级                  */
#define TASK0_STACK_SIZE    512                                         /* 定义用户堆栈长度              */
OS_STK  TASK0_STACK[TASK0_STACK_SIZE];                                  /* 定义任务0 堆栈                */
void    TASK0(void *pdata);                                             /* 声明任务0                     */

/**********************************************************************************************************
  TASK1 任务ID、优先级、堆栈设置及函数声明                                
**********************************************************************************************************/
#define TASK1_ID            12                                          /* 任务的ID                      */
#define TASK1_PRIO          TASK1_ID                                    /* 任务的优先级                  */
#define TASK1_STACK_SIZE    512                                         /* 定义用户堆栈长度              */
OS_STK  TASK1_STACK[TASK1_STACK_SIZE];                                  /* 定义任务1 堆栈                */
void    TASK1(void *pdata);                                             /* 声明任务1                     */
/**********************************************************************************************************
  TASK2 任务ID、优先级、堆栈设置及函数声明                                
**********************************************************************************************************/   
#define TASK2_ID            13                                          /* 任务的ID                      */
#define TASK2_PRIO          TASK2_ID                                    /* 任务的优先级                  */
#define TASK2_STACK_SIZE    1024                                        /* 定义用户堆栈长度              */
OS_STK  TASK2_STACK[TASK2_STACK_SIZE];                                  /* 定义任务2 堆栈                */
void    TASK2(void *pdata);                                             /* 声明任务2                     */
/**********************************************************************************************************
  TASK3 任务ID、优先级、堆栈设置及函数声明                                
**********************************************************************************************************/
#define TASK3_ID            14                                          /* 任务的ID                      */
#define TASK3_PRIO          TASK3_ID                                    /* 任务的优先级                  */
#define TASK3_STACK_SIZE    512                                         /* 定义用户堆栈长度              */
OS_STK  TASK3_STACK[TASK3_STACK_SIZE];                                  /* 定义任务3 堆栈                */
void    TASK3(void *pdata);                                             /* 声明任务3                     */

/**********************************************************************************************************
** Function name:       main
** Descriptions:        主函数
** Input parameters:    None
** output parameters:   None
** Created Date:        
**********************************************************************************************************/
int main (void)
{
	OSInit(); 
    OSTaskCreateExt(TASK0,
                    (void *)0,
                    &TASK0_STACK[TASK0_STACK_SIZE-1],
                    TASK0_PRIO,
                    TASK0_ID,
                    &TASK0_STACK[0],
                    TASK0_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
    OSStart();    
    return 0;                                   
}
		
/**********************************************************************************************************
** Function name:       TASK0
** Descriptions:        None
** input parameters:    None
** output parameters:   None
**********************************************************************************************************/
void TASK0 (void *pdata)
{

    TargetInit();      
      
 	BUZZER_Set();
    OSTimeDly(OS_TICKS_PER_SEC / 10);
    BUZZER_Clr();
    OSTimeDly(OS_TICKS_PER_SEC / 10);
    BUZZER_Set();
    OSTimeDly(OS_TICKS_PER_SEC / 10);
    BUZZER_Clr();
    OSTimeDly(OS_TICKS_PER_SEC / 10);
    	
	pdata = pdata;	    
	OSTaskCreateExt(TASK1,
                    (void *)0,
                    &TASK1_STACK[TASK1_STACK_SIZE-1],
                    TASK1_PRIO,
                    TASK1_ID,
                    &TASK1_STACK[0],
                    TASK1_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
     OSTaskCreateExt(TASK2,
                    (void *)0,
                    &TASK2_STACK[TASK2_STACK_SIZE-1],
                    TASK2_PRIO,
                    TASK2_ID,
                    &TASK2_STACK[0],
                    TASK2_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
                     
    OSTaskCreateExt(TASK3,
                    (void *)0,
                    &TASK3_STACK[TASK3_STACK_SIZE-1],
                    TASK3_PRIO,
                    TASK3_ID,
                    &TASK3_STACK[0],
                    TASK3_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
   	while(1) {	
		OSTimeDly(OS_TICKS_PER_SEC);
	}
}
/**********************************************************************************************************
** Function name:       TASK1
** Descriptions:        None
** input parameters:    None
** output parameters:   None 
**********************************************************************************************************/
void TASK1 (void *pdata)
{
	uint32 i;
	pdata = pdata;	
	SPIInit();
	while(1){	
		for (i = 0;i < 42;i++){
	  		OSTimeDly(OS_TICKS_PER_SEC/3);   
	    	SPISndByte(LED_TBL[i]);	                   					/* 发送显示数据					 */
	  	} 
	}	    
}
OS_EVENT          *MiniSem;                                				/* MiniISA中断信号量			 */

/**********************************************************************************************************
** Function name:       TASK2
** Descriptions:        None
** input parameters:    None
** output parameters:   None
**********************************************************************************************************/
void TASK2	(void *pdata)
{
    uint8 cmd[4], i, err,relay;                                  		/* 命令寄存器					 */
	
	pdata = pdata; 
    MiniSem = OSSemCreate(0);                              				/* 建立信号量					 */
    
    EMCInit();                                            				/* 初始化外部总线				 */
    MISAInit();                                            				/* 外部函数						 */

	 /*
	  *  MiniISA中断初始化	
	  */
	InitExInt();
	OSTimeDly(500);                                        				/* 等待8016A复位完成			 */

	
	cmd[0] = 6;                                            				/* 6 * 5ms = 30ms				 */
	cmd[1] = 0;
	cmd[2] = 0x30;                                           
	WriteCmd8016A(cmd, BoardB0);                          
	cmd[2] = 0x31;                                           
	WriteCmd8016A(cmd, BoardB0);                           				/* 设置IDI0滤波器参数			 */
	cmd[0] = 0x01;
	cmd[2] = 0x20;                                           
	WriteCmd8016A(cmd, BoardB0);                          				/* 使能IDI0的数字滤波功能		 */
		 	
	
	cmd[0] = 10;                                           				/* 10 * 100us					 */
	cmd[1] = 0;
	cmd[2] = 0x10;                                           
	WriteCmd8016A(cmd, BoardB0);                           				/* 设置PWM0高电平 				 */	
	cmd[0] = 10;
	cmd[1] = 0;
	cmd[2] = 0x11;                                           
	WriteCmd8016A(cmd, BoardB0);                           				/* 设置PWM0低电平				 */
	cmd[0] = 20;
	cmd[1] = 0;
	cmd[2] = 0x12;                                           
	WriteCmd8016A(cmd, BoardB0);                           				/* 设置PWM1高电平				 */
	cmd[0] = 20;
	cmd[1] = 0;
	cmd[2] = 0x13;                                           
	WriteCmd8016A(cmd, BoardB0);                           				/* 设置PWM1高电平				 */	
	cmd[0] = 0x03;
	cmd[1] = 0;
	cmd[2] = 0x1f;                                           
	WriteCmd8016A(cmd, BoardB0);                           				/* 使能PWM输出					 */
	
	
	cmd[0] = 0x40;
	cmd[1] = 0;
	cmd[2] = 0x40;                                            
	WriteCmd8016A(cmd, BoardB0);                           				/* 设置IDI0计数初始为100		 */
	
	cmd[0] = 0x48;
	cmd[1] = 0;
	cmd[2] = 0x48;                                        
	WriteCmd8016A(cmd, BoardB0);                           				/* 设置IDI0计数匹配值为106		 */
	
	cmd[0] = 0xff;
	cmd[1] = 0;
	cmd[2] = 0x2B;                                        
	WriteCmd8016A(cmd, BoardB0);                           				/* 使能IDI0计数器匹配中断		 */
	
	cmd[0] = 1;
	cmd[1] = 0;
	cmd[2] = 0x28;                                        
	WriteCmd8016A(cmd, BoardB0);                           				/* 使能IDI0加法计数功能			 */
	
	
	Wreg8016A(M8016_INT_EN, BoardB0, INTCTR);              				/* 总中断						 */
    
	
    cmd[2] = 0x01;                                         				/* 禁能继电器命令 				 */
	while(1)	
	{
		for (relay = 0x00; relay<10; relay++)
		
		for (i=0; i<9; i++){                               				/* 继电器激活					 */
			cmd[0] = LED_TBL[i];
			Write8016A(cmd, BoardB0);
			OSTimeDly(OS_TICKS_PER_SEC / 50);              			
		}
		
		for (i=0; i<10; i++){                               			/* 继电器输出测试				 */
			cmd[0] = LED_TBL[i];
			Write8016A(cmd, BoardB0);
			OSTimeDly(OS_TICKS_PER_SEC / 2);                 			
		}

		for (;;){                                           			/* 输入测试						 */
			cmd[0] = Rreg8016A(BoardB0, IMB3);             				/* 读取输入状态					 */
			Write8016A(cmd, BoardB0);
			OSSemPend(MiniSem, 10, &err);                  				/* 等待中断信号					 */
			if (err == OS_NO_ERR){
				break;
			}
		}
		Int8016A();                                        				/* 8016A中断处理函数			 */
		while (1)
		OSTimeDly(OS_TICKS_PER_SEC * 3);		
	}
}


/**********************************************************************************************************
** Function name:       TASK3
** Descriptions:        None
** input parameters:    None
** output parameters:   None 
**********************************************************************************************************/
void TASK3 (void *pdata)
{
	pdata = pdata;		
	while(1) {			
		BUZZER_Set();
	    OSTimeDly(OS_TICKS_PER_SEC / 2);
	    BUZZER_Clr();
	   	OSTimeDly(OS_TICKS_PER_SEC / 2);		
	}
}

/**********************************************************************************************************
  END FILE
**********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -