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

📄 main.c

📁 ucos移植到44b0
💻 C
字号:

#include "../SOURCE/includes.h"               // uC/OS interface
#include "../inc/44blib.h"
#include "../inc/def.h"
#include "../inc/44b.h"
#include "syscommon.h"


#include "../inc/44blib.h"
#include "../inc/44b.h"
#include "../inc/option.h"
#include "../inc/target.h"

#include "../lwip/debug.h"
#include "../lwip/opt.h"
#include "../lwip/def.h"
#include "../lwip/mem.h"
#include "../lwip/memp.h"
#include "../lwip/pbuf.h"
#include "../lwip/sys.h"
#include "../lwip/tcpip.h"
#include "../lwip/api.h"
#include "../lwip/stats.h"
#include "../netif/etharp.h"
#include "../netif/loopif.h"
#include "../arch/ne2kif.h"
#include "../arch/sys_arch.h"
#include "telnet.h"
void RtcTickInit(void);
extern void telnet_thread(void *arg);

volatile int isrCount = 0;
//begin: add by wangbin for plant 2005-11-25
/* allocate memory for tasks' stacks */

#define	STACKSIZE_H  8192
#define STACKSIZE_L  512
#define rDS1820 (rPDATC & 0x10)
#define wDS1820(a) (rPDATC = (rPDATC & 0xFFEF )|(((a)&0x01)<<4))

OS_STK Stack0[STACKSIZE_L]= {0, };
OS_STK Stack1[STACKSIZE_L]= {0, };
OS_STK Stack2[STACKSIZE_L]= {0, };
OS_STK Stack3[STACKSIZE_L]= {0, };
OS_STK Stack4[STACKSIZE_H]= {0, };
OS_STK lwip_init_stk[STACKSIZE_H]= {0, };	// lwip stacks

OS_EVENT *UartSem;
OS_EVENT *KeySem;

struct netif *rtl8019_netif;
struct netif *loop_netif;

extern char temper;

void lwip_init_task(void *pParam);
void tcpip_init_done(void *arg);
void Sleep(INT16U uSec);
void telnet_init(void);
extern void netdeal(void);
extern void lwipinit(void);
extern void tcp_server_thread(void *arg);
extern void udp_server_thread(void *arg);
void tcp_server_init(void);
void udp_server_init(void);

void lwip_init_task(void * pParam)
{
	struct ip_addr ipaddr, netmask, gw;
	sys_sem_t sem;


    Uart_Printf("come into lwip_init_task!\n");

    //pbuf_init();
#if 0	
#endif
	#if LWIP_STATS
 	stats_init();
	#endif
	sys_init();//内存块分配÷LWIP任务超时结构初始化
	mem_init();//初始化内存MEM_SIZE
	memp_init();//将每一种类型的内存串起来 memp_num[MEMP_MAX]
	pbuf_init();//缓冲区内存池初始化
	netif_init();
    Uart_Printf("come into lwip_init_task----netif_init!\n");

	sem = sys_sem_new(0);//创建信号量0
	tcpip_init(tcpip_init_done, &sem);//初始化TCP/IP参数,以及创建主循环消息队列
	sys_sem_wait(sem);//等待信号量,函数内部实现定时机制
	sys_sem_free(sem);//释放信号量
  
	//add loop interface
	loop_netif = mem_malloc(sizeof(struct netif));
	IP4_ADDR(&gw, 127,0,0,1);
	IP4_ADDR(&ipaddr, 127,0,0,1);
	IP4_ADDR(&netmask, 255,0,0,0);
	netif_add(loop_netif, &ipaddr, &netmask, &gw, NULL, loopif_init, tcpip_input);
	    
	//add rtl8019 interface
  	rtl8019_netif = mem_malloc(sizeof(struct netif));
     //rtl8019_netif = &wb;
     

	//IP4_ADDR(&gw, 192,168,1,254);
	//IP4_ADDR(&ipaddr, 192,168,1,100);
	//IP4_ADDR(&netmask, 255,255,255,0);
	IP4_ADDR(&gw, 192,168,0,1);
	IP4_ADDR(&ipaddr, 192,168,0,100);
	IP4_ADDR(&netmask, 255,255,255,0);

	netif_set_default(netif_add(rtl8019_netif, &ipaddr, &netmask, &gw, NULL, ethernetif_init, tcpip_input));
   // netif_set_addr(rtl8019_netif,&ipaddr, &netmask, &gw);

    //lwipinit();
    //telnet_init();

    tcp_server_init();
    udp_server_init();
    

    //rTICINT = 12|(1<<7);//RTC中断使能位
    //rTICINT = 1|(1<<7);//1//2/128ms	
    //rINTMSK &=~(BIT_TICK);
    
    rINTMSK &=~(BIT_GLOBAL);//全局中断使能
  
	//PRINT(" telnet sever created!\n");

    while(1)
    { 	    
       netdeal();
       OSTimeDly(50);
       //PRINT(" telnet sever created!\n");
    }

	/* Block for ever. */
	sem = sys_sem_new(0);
	sys_sem_wait(sem);
	PRINT(" never goes here, should not appear!");
}

void
tcpip_init_done(void *arg)
{
  sys_sem_t *sem;
  sem = arg;
  sys_sem_signal(*sem);
}


/*-----------------------------------------------------------------------------------*/
void
telnet_init(void)
{
  sys_thread_new(telnet_thread, NULL, 1);  
}

void tcp_server_init(void)
{
  sys_thread_new(tcp_server_thread, NULL, 1);  
}

void udp_server_init(void)
{
  sys_thread_new(udp_server_thread, NULL, 1);  
}

/*-----------------------------------------------------------------------------------*/


/*
 * Task running at the highest priority. 
 */
void TaskLED(void *i)
{
	INT32U task_time;

    for (;;)
    {
		task_time = OSTimeGet();
				
		rPDATE=rPDATE&0x17f;
		OSTimeDly(500);
		rPDATE=rPDATE|0x80;
		OSTimeDly(500);
    }
}

void Task1(void *Id)
{
	

	Uart_Printf("Task1() called\r\n");

	for(;;)
    {
		OSTimeDly(10);
		OS_ENTER_CRITICAL();
		//Uart_Printf("Task1 %c\r\n", *(char *)Id);
		OS_EXIT_CRITICAL();
    }
}

void Task2(void *Id)
{
	
	Uart_Printf("Task2() called\r\n");

	for(;;)
    {
        OSTimeDly(43);
        OS_ENTER_CRITICAL();
        Uart_Printf("Task2 %c\r\n", *(char *)Id);
        OS_EXIT_CRITICAL();
    }
}


void Task3(void *Id)
{

	Uart_Printf("Task3() called\r\n");

	for(;;){
		OSTimeDly(37);
		OS_ENTER_CRITICAL();
		Uart_Printf("Task3 %c\r\n", *(char *)Id);
		OS_EXIT_CRITICAL();
	      }

}

char res1820(void)
{
    char exist = 0;
    //复位操作
    wDS1820(0);
    //Delay(900);//延时600us
    Delay(900);//延时600us
    wDS1820(1);

    //读存在脉冲操作
    Delay(240);//延时90us
    exist = ((rPDATC & 0x10)>>4);

    //Uart_Printf("res1820 = %d!!!\n",(rPDATC & 0x10)>>4);
    Delay(300);//延时90us

    return exist;    
}
char readbyte(void)
{
    _UL  i;
    char byte=0;
    char byte2=0;
    wDS1820(1);//开始
    Delay(20);//延时1us 
    for (i=0;i<=7;i++)
    {
        wDS1820(0);//开始
        Delay(2);//延时1us 
        wDS1820(1);//开始
        Delay(5);//延时1us 
        //Uart_Printf("rDS1820 = %d!!!\n",(rDS1820)>>4);
        byte = byte|((((rPDATC & 0x10)>>4)&0x01)<<i);
        //Uart_Printf("rDS1820 = %d!!!\n",(rDS1820)>>4);
        //Uart_Printf("byte = %d!!!\n",byte);        
        //wDS1820(1);//拉高
        Delay(5);//延时5us
        byte2 = byte2|((((rPDATC & 0x10)>>4)&0x01)<<i);
        
        Delay(40);//延时5us
        wDS1820(1);//开始
        Delay(2);//延时1us 
    }
    //Uart_Printf("byte2 = %d!!!\n",byte2);    
   // wDS1820(1);//拉高   
    return byte;
}

void writebyte(char byte)
{
    _UL i;
    char tmp;
    for (i=0;i<=7;i++)
    {
        tmp = 0;
        tmp = (byte>>i)&(0x01);
        if (tmp)
        {
            wDS1820(0);//开始
            Delay(2);//延时5us

            wDS1820(1);//开始
            Delay(120);//延时5us
            //Uart_Printf("wDS1820(1)!!!\n");
        }
        else
        {
            wDS1820(0);//开始
            Delay(120);//延时5us

            wDS1820(1);//开始
            Delay(2);//延时5us
            //Uart_Printf("wDS1820(0)!!!\n");
        
        }        
    }
}
void convert_temp(void)
{
    res1820();
    writebyte(0xcc);//跳过多传感器识别
    writebyte(0x44);//启动温度转换
}

void read_temp(char *h,char *l)
{
    //初始化
    writebyte(0xcc);
    writebyte(0xbe);//读DS1820暂存器
    *l=readbyte();
    *h=readbyte();
    //Uart_Printf("temp[0] = %d!!!\n",*l);
    //Uart_Printf("temp[1] = %d!!!\n",*h);
}

void TaskTemperature(void *Id)
{
    char exist;
    char tempH,tempL;

    exist = 0;
    tempH = 0;
    tempL = 0;

    
    wDS1820(1);
    Delay(1000000);//延时1s
    exist = res1820();

    while(1 == exist)
    {   
        convert_temp();
        Led_Display(7); 
        OSTimeDly(20000);//延时2秒
        
        res1820();
        read_temp(&tempH,&tempL);
        temper = tempL;
        //Uart_Printf("temper = %d\n",temper);
        Led_Display(0); 
        OSTimeDly(10000);//延时2秒
    }

    Uart_Printf("TaskTemperature has complete!!!");
}

void TaskStart1(void *Id)
{
    char Id4 = '4';
    char Id1 = '1';
    _UC prescaler, divider;
    _US count;	

    Uart_Printf("TaskStart() Created\r\n");
    Led_Display(0);
    Delay(10000); 
    Led_Display(7); 

    OSTaskCreate(TaskTemperature, (void *)&Id1, &Stack1[STACKSIZE_L-1], 12);	
    Uart_Printf("TaskTemperature has complete!\n");

    prescaler = 250;
    divider   = TIMER_DIVIDER_BY_16;
    count     = 1;//定时器周期100us
    Timer2_Start(prescaler, divider, count);
    
    Led_Display(0);

    //UartSem = OSSemCreate(1);//信号量的创建
	//KeySem  = OSMboxCreate((void *)0);//邮箱的创建

    //ARMStartTimer();
    Uart_Printf("rINTMSK\r\n");
    Uart_Printf("come into lwip_init_task!\n");

    OSTaskCreate(lwip_init_task, (void *)&Id4, &lwip_init_stk[STACKSIZE_H-1], 3);	
    Uart_Printf("lwip_init_task has complete!\n");
    
	//OSStatInit();	
	//rTICINT = 12|(1<<7);//RTC中断使能位
	//rTICINT = 1|(1<<7);//1//2/128ms
    //rINTMSK &=~(BIT_TICK);
    //rINTMSK &=~(BIT_GLOBAL);//全局中断使能
    Uart_Printf("rINTMSK\r\n");
	//lwip_init_task(&Id4);

    Uart_Printf("TaskStart1() called\r\n");

	for(;;)
    {
		OSTimeDly(60000);		
    }
      
    
}


int Main(int argc, char **argv)
{
		
	char IdMain='0';
    

	rSYSCFG=SYSCFG_8KB;
#if (PLLON==1)
    ChangePllValue(PLL_M,PLL_P,PLL_S);
#endif

            rINTCON=0x5;
    	rINTMOD=0x0;	  // All=IRQ mode
    	rINTMSK=0x7ffffff;	  // All interrupt is masked.
	rWTCON=0;
   // Isr_Init();
	Port_Init();
	Uart_Init(0,115200);
	Uart_Select(0);
            //Isr_Init();
	
    //OSTimeSet(0);
    //ARMInitInterrupts();
    RtcTickInit();


    Delay(0);  //calibrate Delay()
    Led_Display(7);
    Delay(1000);  //calibrate Delay()
    Led_Display(0);
    Delay(5000);  //calibrate Delay()
    Led_Display(7);

    TEMP_Display(0);
    wDS1820(1);
    Delay(5000000);//延时5s
    
    Uart_Printf("[RTC Tick interrupt test for S3C44B0X]\n");
    Uart_Printf("Please check the VDDRTC connector or connect the VDD to Bt1+ !!!\n");
    Uart_Printf("Typing any key to exit!!!\n");	 
   // rWTCON=0;
    /*
    TaskStart();
    for (;;)
    {
         if (0 == g_Time2Count%10)
        {
            Uart_Printf("past one minute !!!\n");
        }    
    }
*/
	OSInit();

	OSTaskCreate(TaskStart1, (void *)&IdMain, (OS_STK *)&Stack4[STACKSIZE_H-1], 1);

	//Mbox1 = OSMboxCreate(PassMsg);
	//Mbox2 = OSMboxCreate((void *)0);
	//Mbox3 = OSMboxCreate((void *)0);

	OSStart();

	return 0;
}	// main

//End: add by wangbin for plant 2005-11-25

void tick_hook(void)
{
	isrCount++;
	//rI_ISPC = (unsigned int)1 << 20;
    rI_ISPC = BIT_TIMER2;       
}


void RtcTickInit(void)
{
    
    pISR_TICK= (unsigned)OSTickISR;
    //rINTMSK &= 0x7efffff; 
    rRTCCON=0x0;
    //rTICINT = 12;//100ms	
    rTICINT = 1;//1//2/128ms	
    
}

⌨️ 快捷键说明

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