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

📄 ex3.c

📁 dsp芯片TMS320C5416实验程序
💻 C
字号:
#include "includes.h" 
#include "ioports.h"

#define IMR	*(volatile unsigned int*)0x00
#define IFR	*(volatile unsigned int*)0x01

#define TASK_STK_SIZE          256                 /* Size of each task's stacks (# of WORDs)            */
#define N_TASKS                2                   /* Number of identical tasks                          */

OS_STK  TaskStk[N_TASKS][TASK_STK_SIZE];     	   /* Tasks stacks                                  */
OS_STK  task_startStk[TASK_STK_SIZE];
                         
#define ADJUST_DSP_CLK		clk_adjust

void task_start(void *data);
void task_led(void *data);
void task_segs(void *data);

unsigned int seg7[16] = 
	{0x03f|0x80, 0x006, 0x05b, 0x04f, 0x066, 0x06d, 0x07d, 0x007,
	 0x07f, 0x06f, 0x077, 0x07c, 0x039, 0x05e, 0x079, 0x071};
	 
/* mailbox event control blocks */
OS_EVENT *Mbox;

void hard_delay(int cnt)
{
	while(cnt--);
}

void clk_adjust()
{
	asm("	stm #0b, 	CLKMD	");
	asm("ChkForRdy:				");
	asm("	ldm	CLKMD, 	A		");
	asm("	and #01b,	A		");
	asm("	bc  ChkForRdy, ANEQ	");
	asm("	stm #33efh, CLKMD	");
	asm("	rpt #80h	");
	asm("	nop	");
}

void main()
{  
	/* 板卡IO端口及外设初始状态初始化 */
	LED_DAT = 0x01;
	ADJUST_DSP_CLK();
	
	INIT_C54(); 
	
	OSInit();
	                    
	OSTaskCreate(task_start, (void *)0, 
				 (void *)&task_startStk[TASK_STK_SIZE - 1], 0);

	OSStart();
	
	while(1);
}

void task_start(void *data)
{   
    UBYTE err;
    
	OS_ENTER_CRITICAL();
	StartTimer();							/* install the C54x Timer */
	OS_EXIT_CRITICAL();
	
	
	Mbox = OSMboxCreate((void *)0); 
		
	OSTaskCreate(task_led, (void *)0, 
				 (void *)&TaskStk[0][TASK_STK_SIZE - 1], 2);

	OSTaskCreate(task_segs, (void *)0, 
				 (void *)&TaskStk[1][TASK_STK_SIZE - 1], 3);	
	for (;;) {
    	err++;
        OSTimeDly(100);                     /* Delay 100 clock tick */
    }
}

void task_led(void *data)
{
	int index = 0;
	
	for( index = 0; ; index++)
	{
		OSMboxPost(Mbox, (void*)(index&0x07));
		
		LED_DAT = 0x01<<(index&0x07);
		OSTimeDly(2000); 
	}
}

void task_segs(void *data)
{
	int     Msg;
	INT8U	err;	
	
	
	SEG7_CLOSE(2);
	SEG7_CLOSE(3);
	SEG7_CLOSE(4);
	SEG7_CLOSE(5);
	SEG7_CLOSE(6);
	SEG7_CLOSE(7);
	SEG7_CLOSE(8);
	
	SEG7_OPEN(1);

	while(1)
	{	
		/* wait for a message from the input mailbox */
		Msg = (int)OSMboxPend(Mbox, 0, &err);
		
		SEG7_DAT = ~seg7[Msg];
	}
	
	return;
}

⌨️ 快捷键说明

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