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

📄 test2.c

📁 ucos移植到m64
💻 C
字号:

#define Test1_GLOBALS
#include "includes.h"

//******************************************************************************
// Constants
#define TaskStartPrio	10		// Task-Prioritaeten
//*****************************************************************************
// Variablen
INT8U    display[5];
INT8U    h,m,s,state;
OS_STK	Task1Stack[OS_TASK_DEF_STK_SIZE];		// startup task stack
OS_STK	Task2Stack[OS_TASK_DEF_STK_SIZE];
//ICC-AVR application builder : 2003-12-28 21:52:56
// Target : M8
// Crystal: 8.0000Mhz

#include <iom64v.h>
#include <macros.h>
//#include <stdio.h>
#include "uart.h"

//*****************************************************************************
// Prototypes
/*
#define BAUD 	9600
#define CRYSTAL	11059200
#define BAUD_SETTING	(unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
#define BAUD_H	(unsigned char)(BAUD_SETTING>>8)
#define BAUD_L	(unsigned char)(BAUD_SETTING)
void uartInit(uint8 uartNum)
{
	if(1==uartNum)
	{
		 UCSR1B = 0x00; //disable while setting baud rate
	 	 UCSR1A = 0x00;
	 	 UCSR1C = 0x06;
	 	 UBRR1L = BAUD_L; //set baud rate lo
	 	 UBRR1H = BAUD_H; //set baud rate hi
	 	 UCSR1B = 0x18;
	 	 ///共有3个中断源, 接受, 发送, 寄存器空, 对应此寄存器的高3位
	}	
	else
	{
		UCSR0B = 0x00; //disable while setting baud rate
	 	UCSR0A = 0x00;
		UCSR0C = 0x06;	//set frame format, 8 bits, 2stop]
		UBRR0H = BAUD_H;
		UBRR0L = BAUD_L;
		UCSR0B = 0x18;	//enable receive and transmite
		
	}	
}
void putChar(uint8 num, uint8 dat)
{
	ENTER_CRITICAL();
	if(1==num)
	{
		UDR1 = dat;
		while(!(UCSR1A&BIT(TXC1)));	  //发送寄存器空
		UCSR1A|=BIT(TXC1);
	}
	else
	{
		UDR0 = dat;
		while(!(UCSR0A&BIT(TXC0)));
		UCSR0A|=BIT(TXC0);
	}
	EXIT_CRITICAL();
}
*/	
//*****************************************************************************
//			TickISR
//*****************************************************************************
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Hz
// actual value: Out of range
void t1Init(void)
{
	TCCR1B = 0x00; //stop
	TCNT1H = 0x79; //setup
	TCNT1L = 0x02;
	OCR1AH = 0x00;
	OCR1AL = 0x00;
	OCR1BH = 0x00;
	OCR1BL = 0x00;
	OCR1CH = 0x00;
	OCR1CL = 0x00;
	ICR1H  = 0x00;
	ICR1L  = 0x00;
	TCCR1A = 0x00;
	TCCR1B = 0x02; //start Timer
	//时钟源选择
}

//*****************************************************************************
//8倍分频, 11.0592M晶振, 定时25ms
//#pragma interrupt_handler OSTickISR:15

void OSTickISR(void);
#pragma interrupt_handler fuc:15
void fuc()
{
 TCNT1H = 0x79;
 TCNT1L = 0x00;
 OSTickISR();
}
//call this routine to initialize all peripherals
void init_devices(void)
{
	//stop errant interrupts until set up
	CLI(); 			//disable all interrupts
	XDIV  = 0x00; 	//xtal divider
	XMCRA = 0x00; 	//external memory
	t1Init();
	
	MCUCR = 0x00;
	EICRA = 0x00; 	//extended ext ints
	EICRB = 0x00; 	//extended ext ints
	EIMSK = 0x00;
	TIMSK = 0x04; 	//timer interrupt sources
	ETIMSK = 0x00; 	//extended timer interrupt sources
	//SEI(); 			//re-enable interrupts
}

void Task1(void *pdata);
void Task2(void *pdata);

//*****************************************************************************
// Start
#define LED()	 	PORTC = PORTC^BIT(4);
void main(void){
	PORTC=BIT(4);
	DDRC=BIT(4);
	LED();
	OSInit();		// OS init
	OSTaskCreate(Task1,
				(void *)0,
				&Task1Stack[OS_TASK_DEF_STK_SIZE-1],
				7);
	OSTaskCreate(Task2,
				(void *)0,
				&Task2Stack[OS_TASK_DEF_STK_SIZE-1],
				6); 
	// init und start tick
    init_devices();
    uartInit(1);
    OSStart();		// start multitasking
    
}

//*****************************************************************************
void Task1(void *data)
{
	SEI();
   	for (;;)
 	{
 		LED();
		putStr(1, "task 1!\n\r");
		OSTimeDly (20);
		LED();
		OSTimeDly (20);
	}
			
}
void Task2(void *data)
{
	SEI();
 	for (;;)
 	{
		putStr(1, "task 2!\n\r");
		OSTimeDly (80);
	}
}

⌨️ 快捷键说明

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