350 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			350 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/****************************************************************************
 | 
						|
 | 
						|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | 
						|
 | 
						|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | 
						|
be copied by any method or incorporated into another program without
 | 
						|
the express written consent of Aerospace C.Power. This Information or any portion
 | 
						|
thereof remains the property of Aerospace C.Power. The Information contained herein
 | 
						|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | 
						|
liability for its use in any way and conveys no license or title under
 | 
						|
any patent or copyright and makes no representation or warranty that this
 | 
						|
Information is free from patent or copyright infringement.
 | 
						|
 | 
						|
****************************************************************************/
 | 
						|
/* os shim includes */
 | 
						|
#include "os_types.h"
 | 
						|
#include "os_task.h"
 | 
						|
#include "os_utils.h"
 | 
						|
 | 
						|
/* common includes */
 | 
						|
#include "iot_io.h"
 | 
						|
#include "iot_bitops.h"
 | 
						|
#include "iot_pkt.h"
 | 
						|
#include "iot_ipc.h"
 | 
						|
#include "iot_dbglog_api.h"
 | 
						|
#include "iot_config.h"
 | 
						|
 | 
						|
/* driver includes */
 | 
						|
#include "iot_clock.h"
 | 
						|
#include "iot_uart.h"
 | 
						|
#include "iot_led.h"
 | 
						|
 | 
						|
/* cli includes */
 | 
						|
#include "iot_cli.h"
 | 
						|
#include "iot_uart_h.h"
 | 
						|
 | 
						|
/* debug includes*/
 | 
						|
#include "dbg_io.h"
 | 
						|
 | 
						|
#include "iot_gpio_api.h"
 | 
						|
 | 
						|
#include "hw_reg_api.h"
 | 
						|
 | 
						|
#include "gpio_mtx_reg.h"
 | 
						|
#include "pin_rf.h"
 | 
						|
#include "iot_share_task.h"
 | 
						|
 | 
						|
#define BIT_INT_CLR     0
 | 
						|
#define BIT_INT_ENA     1
 | 
						|
#define BIT_INT_ST      2
 | 
						|
#define BIT_INT_RAW     3
 | 
						|
#define BIT_INT_TYP     4
 | 
						|
#define BIT_WUP_ENA     7
 | 
						|
#define BIT_IN_DATA     8
 | 
						|
#define BIT_IN_ENA      9
 | 
						|
#define BIT_OUT_ENA     10
 | 
						|
#define BIT_OUT_DATA    11
 | 
						|
 | 
						|
#define BIT_OD_MODE     13
 | 
						|
 | 
						|
#define TEST_GPIO_INPUT     0
 | 
						|
#define TEST_GPIO_OUTPUT    1
 | 
						|
#define TEST_GPIO_INT       2
 | 
						|
 | 
						|
char test_case = TEST_GPIO_INT;
 | 
						|
extern int platform_init();
 | 
						|
os_task_h test_init_handle;
 | 
						|
 | 
						|
static void gpio_func_set(uint8_t gpio_no, uint8_t func)
 | 
						|
{
 | 
						|
    uint32_t tmp;
 | 
						|
    uint32_t addr;
 | 
						|
 | 
						|
    if(gpio_no < 52){
 | 
						|
        addr = CFG_GPIO00_PIN_CFG_ADDR + (gpio_no << 2);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        return ;
 | 
						|
    }
 | 
						|
 | 
						|
    tmp = PIN_RF_READ_REG(addr);
 | 
						|
    /* Set function */
 | 
						|
    tmp &= GPIO00_FUNC_SEL_MASK;
 | 
						|
    tmp |= (func<<GPIO00_FUNC_SEL_OFFSET)&GPIO00_FUNC_SEL_MASK;
 | 
						|
    /* Set pull-up */
 | 
						|
    tmp &= ~(GPIO00_FUNC_WPD_MASK);
 | 
						|
    tmp |= (GPIO00_FUNC_WPU_MASK);
 | 
						|
    PIN_RF_WRITE_REG(addr, tmp);
 | 
						|
 | 
						|
    return ;
 | 
						|
}
 | 
						|
 | 
						|
void test_task_output(){
 | 
						|
	int v=0, r;
 | 
						|
 | 
						|
    iot_printf("test_task_output....\n");
 | 
						|
 | 
						|
#define TEST_OUTPUT    0
 | 
						|
#define TEST_INPUT     1
 | 
						|
 | 
						|
	r = iot_gpio_open_as_output(TEST_OUTPUT);
 | 
						|
	r |= iot_gpio_open_as_output(TEST_INPUT);
 | 
						|
 | 
						|
	if(r != 0)
 | 
						|
	{
 | 
						|
		iot_printf("\ngpio_set_direction failed!\n");
 | 
						|
	}
 | 
						|
 | 
						|
    for(;;) {
 | 
						|
		if(v)
 | 
						|
		{
 | 
						|
			iot_printf("\nSet low:");
 | 
						|
			v = 0;
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			iot_printf("\nSet High:");
 | 
						|
			v = 1;
 | 
						|
		}
 | 
						|
 | 
						|
		if(0 != iot_gpio_value_set(TEST_OUTPUT, v))
 | 
						|
		{
 | 
						|
			iot_printf("WRITE FAILED ");
 | 
						|
		}
 | 
						|
		os_delay(1000);
 | 
						|
		r = iot_gpio_value_get(TEST_INPUT);
 | 
						|
		if(r)
 | 
						|
		{
 | 
						|
			iot_printf("Get High\n");
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			iot_printf("Get Low:\n");
 | 
						|
		}
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void test_task_input(){
 | 
						|
 | 
						|
    int i, r=0;
 | 
						|
 | 
						|
    iot_printf("test_task_input....\n");
 | 
						|
    gpio_func_set(0, 0);
 | 
						|
    gpio_func_set(1, 0);
 | 
						|
    gpio_func_set(2, 0);
 | 
						|
 | 
						|
    r |= iot_gpio_open_as_input(0);
 | 
						|
    r |= iot_gpio_open_as_input(1);
 | 
						|
    r |= iot_gpio_open_as_input(2);
 | 
						|
 | 
						|
    gpio_func_set(3, 0);
 | 
						|
    gpio_func_set(4, 0);
 | 
						|
    r |= iot_gpio_open_as_output(3);
 | 
						|
    r |= iot_gpio_open_as_output(4);
 | 
						|
    r |= iot_gpio_value_set(3, 1);
 | 
						|
    r |= iot_gpio_value_set(4, 0);
 | 
						|
//    r |= gpio_set_direction(CFG_GPIO19_CFG_ADDR, DIR_INPUT);
 | 
						|
 | 
						|
    if(r != 0)
 | 
						|
    {
 | 
						|
        iot_printf("\ngpio_set_direction failed!\n");
 | 
						|
    }
 | 
						|
 | 
						|
    for(;;)
 | 
						|
    {
 | 
						|
        iot_printf("GPIO input status:\n");
 | 
						|
        for(i=0; i<3; i++)
 | 
						|
        {
 | 
						|
            if(iot_gpio_value_get(i)==1)
 | 
						|
            {
 | 
						|
                    iot_printf("GPIO%02d input: High Levle\n", i);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                    iot_printf("GPIO%02d input: Low Levle\n", i);
 | 
						|
            }
 | 
						|
            os_delay(1000);
 | 
						|
        }
 | 
						|
     }
 | 
						|
}
 | 
						|
 | 
						|
void test_task_int_isr(void)
 | 
						|
{
 | 
						|
    iot_printf("GPIO interrupt triggered");
 | 
						|
}
 | 
						|
 | 
						|
void gpio_task_hander(int pin)
 | 
						|
{
 | 
						|
    iot_printf("GPIO%02d has been triggered!\n", pin);
 | 
						|
    os_delay(500);
 | 
						|
    iot_gpio_interrupt_enable(pin, 1);
 | 
						|
}
 | 
						|
 | 
						|
void test_task_intterrupt(){
 | 
						|
    int r=0;
 | 
						|
 | 
						|
    gpio_func_set(0, 0);
 | 
						|
    gpio_func_set(1, 0);
 | 
						|
 | 
						|
    iot_share_task_init();
 | 
						|
 | 
						|
    r |= iot_gpio_open_as_interrupt(0);
 | 
						|
    r |= iot_gpio_open_as_interrupt(1);
 | 
						|
 | 
						|
    r |= iot_gpio_interrupt_config
 | 
						|
        (0, GPIO_INT_EDGE_FALLING, (iot_gpio_isr_func)gpio_task_hander, 0,
 | 
						|
        GPIO_INT_FUNC_ENABLE_AUTOSTOP);
 | 
						|
    r |= iot_gpio_interrupt_config
 | 
						|
        (1, GPIO_INT_LEVEL_LOW, (iot_gpio_isr_func)gpio_task_hander, 1,
 | 
						|
        GPIO_INT_FUNC_ENABLE_AUTOSTOP);
 | 
						|
 | 
						|
    r |= iot_gpio_interrupt_enable(0, 1);
 | 
						|
    r |= iot_gpio_interrupt_enable(1, 1);
 | 
						|
 | 
						|
   if(r != 0)
 | 
						|
   {
 | 
						|
       iot_printf("\ngpio_set_interrupt failed!\n");
 | 
						|
   }
 | 
						|
   else
 | 
						|
   {
 | 
						|
       iot_printf("\ngpio_set_interrupt successfully!\n");
 | 
						|
   }
 | 
						|
   while(1)
 | 
						|
   {
 | 
						|
       ;
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
void test_task_init()
 | 
						|
{
 | 
						|
   os_task_h handle;
 | 
						|
 | 
						|
 | 
						|
    if(test_case == TEST_GPIO_OUTPUT){
 | 
						|
        handle = os_create_task(test_task_output, NULL, 6);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        if(test_case == TEST_GPIO_INPUT)
 | 
						|
        {
 | 
						|
            handle = os_create_task(test_task_input, NULL, 6);
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            handle = os_create_task(test_task_intterrupt, NULL, 6);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
   //create the tasks;
 | 
						|
   if(handle != NULL) {
 | 
						|
       iot_printf("task create successfully...\n");
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
void test_init()
 | 
						|
{
 | 
						|
    /* init common modules */
 | 
						|
    iot_bitops_init();
 | 
						|
 | 
						|
    /* init os related modules and utilities */
 | 
						|
    os_utils_init();
 | 
						|
 | 
						|
    /* init dbglog module */
 | 
						|
    iot_dbglog_init();
 | 
						|
 | 
						|
    /* init ipc module */
 | 
						|
    iot_ipc_init();
 | 
						|
 | 
						|
    /*init uart module*/
 | 
						|
    iot_uart_init(1);
 | 
						|
 | 
						|
    test_task_init();
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void init_task(void *arg)
 | 
						|
{
 | 
						|
    iot_printf("task 1 entry....\n");
 | 
						|
 | 
						|
    for(;;) {
 | 
						|
       test_init();
 | 
						|
       os_delete_task(test_init_handle);
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
int32_t iot_task_init()
 | 
						|
{
 | 
						|
    /* start plc lib task */
 | 
						|
    test_init_handle = os_create_task(init_task, NULL, 9);
 | 
						|
 | 
						|
 | 
						|
    //create the tasks;
 | 
						|
    if(test_init_handle != NULL) {
 | 
						|
        iot_printf("task 1 init successfully...\n");
 | 
						|
    }
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int32_t iot_task_start()
 | 
						|
{
 | 
						|
    //start the tasks;
 | 
						|
    os_start_kernel();
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
static int32_t iot_platform_init()
 | 
						|
{
 | 
						|
    /*platform intialization*/
 | 
						|
    platform_init();
 | 
						|
 | 
						|
    //resource initializations;
 | 
						|
    system_clock_init();
 | 
						|
 | 
						|
    system_uart_init();
 | 
						|
 | 
						|
    dbg_uart_init();
 | 
						|
 | 
						|
    iot_led_init();
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int32_t iot_module_init(void)
 | 
						|
{
 | 
						|
    //platform intialization;
 | 
						|
    iot_platform_init();
 | 
						|
 | 
						|
    //create all the tasks;
 | 
						|
    iot_task_init();
 | 
						|
 | 
						|
    iot_printf("starting...\n");
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int main(void)
 | 
						|
{
 | 
						|
   //module init;
 | 
						|
   iot_module_init();
 | 
						|
 | 
						|
   //module start;
 | 
						|
   iot_task_start();
 | 
						|
 | 
						|
   return 0;
 | 
						|
}
 |