📄 main.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 + -