284 lines
5.5 KiB
C
Executable File
284 lines
5.5 KiB
C
Executable File
|
|
#include "os_types.h"
|
|
#include "os_task.h"
|
|
#include "os_mem.h"
|
|
|
|
#include "dbg_io.h"
|
|
#include "iot_diag.h"
|
|
#include "iot_io.h"
|
|
|
|
|
|
|
|
//#include <stdlib.h>
|
|
#include "iot_system_api.h"
|
|
#include "iot_config.h"
|
|
|
|
|
|
|
|
|
|
//#include "iot_gptmr.h"
|
|
#include "iot_system.h"
|
|
//#include "os_mem.h"
|
|
//#include "cpu.h"
|
|
//#include "os_task.h"
|
|
|
|
#include "platform.h"
|
|
#include "encoding.h"
|
|
|
|
//#include "sec_glb.h"
|
|
//#include "ahb.h"
|
|
//#include "intc.h"
|
|
|
|
#include "bits.h"
|
|
|
|
#include "iso7816_sim_rf.h"
|
|
#include "apb_glb0_reg.h"
|
|
#include "hw_reg_api.h"
|
|
|
|
#include "os_utils.h"
|
|
#include "iso7816.h"
|
|
|
|
#include "gpio_mtx.h"
|
|
|
|
//#define RF0 0
|
|
#define RF 1
|
|
|
|
|
|
static int32_t iot__platform_init()
|
|
{
|
|
/*platform intialization*/
|
|
platform_init();
|
|
|
|
//resource initializations;
|
|
// system_clock_init();
|
|
|
|
// system_uart_init();
|
|
|
|
dbg_uart_init();
|
|
|
|
// dbg_uart_stage1_init();
|
|
|
|
// iot_led_init();
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define GMTX_SIM0_DATA_in 57
|
|
#define GMTX_SIM1_DATA_in 58
|
|
#define GMTX_SIM1_DATA_out 90
|
|
#define GMTX_SIM1_CLK_out 91
|
|
#define GMTX_SIM1_RST_out 92
|
|
#define GMTX_SIM0_DATA_out 87
|
|
#define GMTX_SIM0_CLK_out 88
|
|
#define GMTX_SIM0_RST_out 89
|
|
|
|
uint8_t sim_gpio_sel(uint8_t port, uint8_t data, uint8_t clk, uint8_t rst)
|
|
{
|
|
if(SIM_INVALID(port))
|
|
return 1;
|
|
|
|
gpio_mtx_enable();
|
|
uint8_t data_func = 0;
|
|
uint8_t clk_func = 0;
|
|
uint8_t rst_func = 0;
|
|
gpio_sig_info_t info = {0};
|
|
|
|
data_func = gpio_pin_func_get(data);
|
|
clk_func = gpio_pin_func_get(clk);
|
|
rst_func = gpio_pin_func_get(rst);
|
|
|
|
info.CFG[0].type = IO_TYPE_IO;
|
|
info.CFG[0].func = data_func;
|
|
info.CFG[0].gpio = data;
|
|
info.CFG[1].type = IO_TYPE_OUT;
|
|
info.CFG[1].func = clk_func;
|
|
info.CFG[1].gpio = clk;
|
|
info.CFG[2].type = IO_TYPE_OUT;
|
|
info.CFG[2].func = rst_func;
|
|
info.CFG[2].gpio = rst;
|
|
|
|
if (port == 0) {
|
|
info.sig_type = 3;
|
|
info.CFG[0].inid = GMTX_SIM0_DATA_in;
|
|
info.CFG[0].outid = GMTX_SIM0_DATA_out;
|
|
info.CFG[1].inid = 0xff;
|
|
info.CFG[1].outid = GMTX_SIM0_CLK_out;
|
|
info.CFG[2].inid = 0xff;
|
|
info.CFG[2].outid = GMTX_SIM0_RST_out;
|
|
} else if (port == 1){
|
|
info.sig_type = 3;
|
|
info.CFG[0].inid = GMTX_SIM1_DATA_in;
|
|
info.CFG[0].outid = GMTX_SIM1_DATA_out;
|
|
info.CFG[1].inid = 0xff;
|
|
info.CFG[1].outid = GMTX_SIM1_CLK_out;
|
|
info.CFG[2].inid = 0xff;
|
|
info.CFG[2].outid = GMTX_SIM1_RST_out;
|
|
}
|
|
|
|
gpio_module_pin_select(&info);
|
|
gpio_module_sig_select(&info, GPIO_MTX_MODE_MATRIX);
|
|
return 0;
|
|
}
|
|
|
|
void user_task_1()
|
|
{
|
|
uint32_t value=0;
|
|
uint8_t i =0;
|
|
|
|
sim_gpio_sel(1, 3, 4, 5);
|
|
|
|
//tmode0 tx test
|
|
// iso7816_controller_reset(RF);
|
|
// iso7816_tmode_init(RF);
|
|
// iso7816_tmode_set_mode0(RF);
|
|
// iso7816_cold_reset(RF);
|
|
// iso7816_set_tx_mode(RF);
|
|
|
|
// iso7816_tx(RF1,0x68660055);
|
|
// iso7816_tx(RF1,0x686600aa);
|
|
|
|
// os_delay(400);
|
|
|
|
|
|
//tmode1 tx test
|
|
// iso7816_controller_reset(RF);
|
|
// iso7816_tmode_init(RF);
|
|
|
|
// iso7816_tmode_set_mode1(RF);
|
|
// iso7816_cold_reset(RF);
|
|
// iso7816_set_tx_mode(RF);
|
|
|
|
// iso7816_tx(RF1,0x68660055);
|
|
// iso7816_tx(RF1,0x686600aa);
|
|
|
|
// os_delay(400);
|
|
|
|
//tmode0 atr test
|
|
iso7816_controller_reset(RF);
|
|
iso7816_tmode_init(RF);
|
|
iso7816_cold_reset(RF);
|
|
|
|
iso7816_set_rx_mode(RF);
|
|
if(0==iso7816_rx_fifo_empty_check(RF)){
|
|
i =0;
|
|
while(0==iso7816_rx_fifo_empty_check(RF)){
|
|
value = iso7816_rx(RF);
|
|
iot_printf("recieve data %d = %x \n",i,value);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
|
|
//tmode1 9bit tx and rx test
|
|
iso7816_rx_fifo_clear(RF);
|
|
os_delay(400);
|
|
|
|
iso7816_tmode_set_mode1(RF);
|
|
iso7816_set_tx_mode(RF);
|
|
iso7816_tx(RF,0x68660000);
|
|
iso7816_tx(RF,0x686600A4);
|
|
iso7816_tx(RF,0x68660004);
|
|
iso7816_tx(RF,0x68660000);
|
|
iso7816_tx(RF,0x6866000E);
|
|
|
|
iso7816_wait_for_tx_done(RF);
|
|
iso7816_set_rx_mode(RF);
|
|
|
|
os_delay(400);
|
|
|
|
if(0==iso7816_rx_fifo_empty_check(RF)){
|
|
value = iso7816_rx(RF);
|
|
iot_printf("data received data = %x!\n",value);
|
|
}
|
|
else{
|
|
iot_printf("no data received\n");
|
|
}
|
|
|
|
//de-active test
|
|
iso7816_rx_fifo_clear(RF);
|
|
os_delay(400);
|
|
|
|
iso7816_card_release(RF);
|
|
os_delay(400);
|
|
iso7816_cold_reset(RF);
|
|
//iso7816_warm_reset(RF);
|
|
if(0==iso7816_rx_fifo_empty_check(RF)){
|
|
iot_printf("iso7816 rf%d card release successfully !\n",RF);
|
|
iso7816_set_rx_mode(RF);
|
|
|
|
i =0;
|
|
while(0==iso7816_rx_fifo_empty_check(RF)){
|
|
value = iso7816_rx(RF);
|
|
iot_printf("recieve data %d = %x \n",i,value);
|
|
i++;
|
|
}
|
|
}
|
|
else{
|
|
iot_printf("iso7816 rf%d card release failed !\n",RF);
|
|
}
|
|
|
|
while(1)
|
|
{
|
|
iot_printf("user_task_1....\n");
|
|
os_delay(400);
|
|
}
|
|
}
|
|
|
|
int32_t iot__task_init()
|
|
{
|
|
os_task_h handle;
|
|
|
|
handle = os_create_task(user_task_1, NULL, 9);
|
|
|
|
//create the tasks;
|
|
if(handle != NULL) {
|
|
iot_printf("task 1 init successfully...\n");
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
int32_t iot__task_start()
|
|
{
|
|
//start the tasks;
|
|
os_start_kernel();
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t iot__module_start(void)
|
|
{
|
|
int32_t res = 0;
|
|
|
|
res = iot__task_start();
|
|
|
|
return res;
|
|
}
|
|
|
|
|
|
int main(void)
|
|
{
|
|
//module init;
|
|
iot__module_init();
|
|
|
|
//module start;
|
|
iot__module_start();
|
|
|
|
return 0;
|
|
}
|
|
|