nkjnm

Dependencies:   MAX44000 nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Committer:
nexpaq
Date:
Sat Sep 17 16:21:40 2016 +0000
Revision:
0:b86eda0e990d
Child:
2:3842948024ca
checking in to share

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nexpaq 0:b86eda0e990d 1 /*
nexpaq 0:b86eda0e990d 2 * np_system.c
nexpaq 0:b86eda0e990d 3 *
nexpaq 0:b86eda0e990d 4 * Created on: July 14, 2016
nexpaq 0:b86eda0e990d 5 * Author: Alan.Lin
nexpaq 0:b86eda0e990d 6 *
nexpaq 0:b86eda0e990d 7 * Copyright: NexPack Ltd.
nexpaq 0:b86eda0e990d 8 */
nexpaq 0:b86eda0e990d 9
nexpaq 0:b86eda0e990d 10 #include "np_config.h"
nexpaq 0:b86eda0e990d 11 #include "np_driver_timer.h"
nexpaq 0:b86eda0e990d 12 #include "np_driver_spi.h"
nexpaq 0:b86eda0e990d 13 #include "np_app_spi.h"
nexpaq 0:b86eda0e990d 14 #include "np_app_ncn_interface.h"
nexpaq 0:b86eda0e990d 15 #include "spis.h"
nexpaq 0:b86eda0e990d 16 #include "np_system.h"
nexpaq 0:b86eda0e990d 17 #include "np_command.h"
nexpaq 0:b86eda0e990d 18
nexpaq 0:b86eda0e990d 19 extern const gpio_cfg_t gpio_req_spi[];
nexpaq 0:b86eda0e990d 20
nexpaq 0:b86eda0e990d 21 /* Description: delay function
nexpaq 0:b86eda0e990d 22 * t_ms: the time for delay.MS as the unit
nexpaq 0:b86eda0e990d 23 *
nexpaq 0:b86eda0e990d 24 */
nexpaq 0:b86eda0e990d 25 void delay_ms(uint32_t t_ms)
nexpaq 0:b86eda0e990d 26 {
nexpaq 0:b86eda0e990d 27 while(t_ms) {
nexpaq 0:b86eda0e990d 28 SYS_SysTick_Delay(96000);
nexpaq 0:b86eda0e990d 29 t_ms--;
nexpaq 0:b86eda0e990d 30 }
nexpaq 0:b86eda0e990d 31 }
nexpaq 0:b86eda0e990d 32
nexpaq 0:b86eda0e990d 33 /*
nexpaq 0:b86eda0e990d 34 * Description: disable all interrupt used on MDK
nexpaq 0:b86eda0e990d 35 * Parameter : null
nexpaq 0:b86eda0e990d 36 * Return : null
nexpaq 0:b86eda0e990d 37 */
nexpaq 0:b86eda0e990d 38 void np_system_disable_interrupt(void)
nexpaq 0:b86eda0e990d 39 {
nexpaq 0:b86eda0e990d 40 NVIC_DisableIRQ(TMR0_0_IRQn);
nexpaq 0:b86eda0e990d 41 NVIC_DisableIRQ(SPIS_IRQn);
nexpaq 0:b86eda0e990d 42 }
nexpaq 0:b86eda0e990d 43
nexpaq 0:b86eda0e990d 44 /*
nexpaq 0:b86eda0e990d 45 * Description: Setting the version of MDK
nexpaq 0:b86eda0e990d 46 * Parameter: mdk version
nexpaq 0:b86eda0e990d 47 * Return: null
nexpaq 0:b86eda0e990d 48 */
nexpaq 0:b86eda0e990d 49 void np_function_set_mdk_version(uint8_t HV, uint8_t MV, uint8_t LV)
nexpaq 0:b86eda0e990d 50 {
nexpaq 0:b86eda0e990d 51 mdk_mdk_version[0] = HV;
nexpaq 0:b86eda0e990d 52 mdk_mdk_version[1] = MV;
nexpaq 0:b86eda0e990d 53 mdk_mdk_version[2] = LV;
nexpaq 0:b86eda0e990d 54 }
nexpaq 0:b86eda0e990d 55
nexpaq 0:b86eda0e990d 56 /*
nexpaq 0:b86eda0e990d 57 * Description: MDK initial
nexpaq 0:b86eda0e990d 58 * Parameter : null
nexpaq 0:b86eda0e990d 59 * Return : null
nexpaq 0:b86eda0e990d 60 */
nexpaq 0:b86eda0e990d 61 void np_mdk_setup(void)
nexpaq 0:b86eda0e990d 62 {
nexpaq 0:b86eda0e990d 63 int t_reback = E_BUSY;
nexpaq 0:b86eda0e990d 64
nexpaq 0:b86eda0e990d 65 GPIO_Config(&gpio_req_spi[0]); //Input
nexpaq 0:b86eda0e990d 66 //ignore clock initial
nexpaq 0:b86eda0e990d 67 while(t_reback != E_NO_ERROR) {
nexpaq 0:b86eda0e990d 68 t_reback = driver_spi_slave_initial();
nexpaq 0:b86eda0e990d 69 delay_ms(10);
nexpaq 0:b86eda0e990d 70 }
nexpaq 0:b86eda0e990d 71
nexpaq 0:b86eda0e990d 72 Timer0_initial();
nexpaq 0:b86eda0e990d 73 np_function_set_post_address(RAM_SOURCE_ADDR);
nexpaq 0:b86eda0e990d 74
nexpaq 0:b86eda0e990d 75 spi_status = SPI_FREE;
nexpaq 0:b86eda0e990d 76 my_node = RAM_MY_NODE;
nexpaq 0:b86eda0e990d 77 }
nexpaq 0:b86eda0e990d 78
nexpaq 0:b86eda0e990d 79 /*
nexpaq 0:b86eda0e990d 80 * Description: system initial,include app initial and mdk initial
nexpaq 0:b86eda0e990d 81 * Parameter : null
nexpaq 0:b86eda0e990d 82 * Return : null
nexpaq 0:b86eda0e990d 83 */
nexpaq 0:b86eda0e990d 84 void np_system_initial(app_function np_app_setup)
nexpaq 0:b86eda0e990d 85 {
nexpaq 0:b86eda0e990d 86 uint8_t answer = 0;
nexpaq 0:b86eda0e990d 87
nexpaq 0:b86eda0e990d 88 np_function_set_mdk_version(1,0,7);
nexpaq 0:b86eda0e990d 89 np_mdk_setup();
nexpaq 0:b86eda0e990d 90 np_app_setup();
nexpaq 0:b86eda0e990d 91 np_function_ncn_interface_post_message(RSP_INTO_APP, &answer, 1);
nexpaq 0:b86eda0e990d 92 flag_jump_bsl = 0;
nexpaq 0:b86eda0e990d 93 }
nexpaq 0:b86eda0e990d 94
nexpaq 0:b86eda0e990d 95 /*
nexpaq 0:b86eda0e990d 96 * Description: mdk initialization
nexpaq 0:b86eda0e990d 97 * Parameter : null
nexpaq 0:b86eda0e990d 98 * Return : null
nexpaq 0:b86eda0e990d 99 */
nexpaq 0:b86eda0e990d 100 void np_sys_init()
nexpaq 0:b86eda0e990d 101 {
nexpaq 0:b86eda0e990d 102 np_function_set_mdk_version(1,0,7);
nexpaq 0:b86eda0e990d 103 np_mdk_setup();
nexpaq 0:b86eda0e990d 104 #ifdef DBG_MSG
nexpaq 0:b86eda0e990d 105 printf("NP System Initialized\n\r");
nexpaq 0:b86eda0e990d 106 #endif
nexpaq 0:b86eda0e990d 107 }
nexpaq 0:b86eda0e990d 108
nexpaq 0:b86eda0e990d 109 /*
nexpaq 0:b86eda0e990d 110 * Description: signal when system is ready
nexpaq 0:b86eda0e990d 111 * Parameter : null
nexpaq 0:b86eda0e990d 112 * Return : null
nexpaq 0:b86eda0e990d 113 */
nexpaq 0:b86eda0e990d 114 void np_sys_start()
nexpaq 0:b86eda0e990d 115 {
nexpaq 0:b86eda0e990d 116 uint8_t answer = 0;
nexpaq 0:b86eda0e990d 117 np_function_ncn_interface_post_message(RSP_INTO_APP, &answer, 1);
nexpaq 0:b86eda0e990d 118 flag_jump_bsl = 0;
nexpaq 0:b86eda0e990d 119 #ifdef DBG_MSG
nexpaq 0:b86eda0e990d 120 printf("NP System Started\n\r");
nexpaq 0:b86eda0e990d 121 #endif
nexpaq 0:b86eda0e990d 122 }
nexpaq 0:b86eda0e990d 123
nexpaq 0:b86eda0e990d 124 /*
nexpaq 0:b86eda0e990d 125 * Description: function to check and jump to boot loader
nexpaq 0:b86eda0e990d 126 * Parameter : null
nexpaq 0:b86eda0e990d 127 * Return : null
nexpaq 0:b86eda0e990d 128 */
nexpaq 0:b86eda0e990d 129 #ifdef TOOLCHAIN_ARM_STD
nexpaq 0:b86eda0e990d 130 register int _r0 __asm("r0");
nexpaq 0:b86eda0e990d 131 register int _pc __asm("pc");
nexpaq 0:b86eda0e990d 132 #endif
nexpaq 0:b86eda0e990d 133
nexpaq 0:b86eda0e990d 134 void np_sys_bsl_chk()
nexpaq 0:b86eda0e990d 135 {
nexpaq 0:b86eda0e990d 136 if( flag_jump_bsl > 0x00 ) {
nexpaq 0:b86eda0e990d 137 flag_jump_bsl = 0x00;
nexpaq 0:b86eda0e990d 138 np_system_disable_interrupt();
nexpaq 0:b86eda0e990d 139 #ifdef DBG_MSG
nexpaq 0:b86eda0e990d 140 printf("Entering Bootloader\n\r");
nexpaq 0:b86eda0e990d 141 #endif
nexpaq 0:b86eda0e990d 142 #ifdef TOOLCHAIN_ARM_STD
nexpaq 0:b86eda0e990d 143 __asm {
nexpaq 0:b86eda0e990d 144 mov _r0, #0x20000008
nexpaq 0:b86eda0e990d 145 ldr _pc, [_r0]
nexpaq 0:b86eda0e990d 146 }
nexpaq 0:b86eda0e990d 147 }
nexpaq 0:b86eda0e990d 148 __asm {
nexpaq 0:b86eda0e990d 149 mov _r0, _r0
nexpaq 0:b86eda0e990d 150 mov _r0, _r0
nexpaq 0:b86eda0e990d 151 }
nexpaq 0:b86eda0e990d 152 #else
nexpaq 0:b86eda0e990d 153 __asm volatile(
nexpaq 0:b86eda0e990d 154 " LDR R0, =0x20000008 \n"
nexpaq 0:b86eda0e990d 155 " LDR PC, [R0] \n"
nexpaq 0:b86eda0e990d 156 );
nexpaq 0:b86eda0e990d 157 }
nexpaq 0:b86eda0e990d 158 __asm volatile("nop \n");
nexpaq 0:b86eda0e990d 159 __asm volatile("nop \n");
nexpaq 0:b86eda0e990d 160 #endif
nexpaq 0:b86eda0e990d 161 }
nexpaq 0:b86eda0e990d 162
nexpaq 0:b86eda0e990d 163 /*
nexpaq 0:b86eda0e990d 164 * Description: system loop,software will run the function forever when software is on app mode.
nexpaq 0:b86eda0e990d 165 * Parameter : null
nexpaq 0:b86eda0e990d 166 * Return : null
nexpaq 0:b86eda0e990d 167 */
nexpaq 0:b86eda0e990d 168 void np_system_loop(app_function np_api_loop)
nexpaq 0:b86eda0e990d 169 {
nexpaq 0:b86eda0e990d 170 while(1) {
nexpaq 0:b86eda0e990d 171 np_api_loop();
nexpaq 0:b86eda0e990d 172 //jumping to the bootloader
nexpaq 0:b86eda0e990d 173 if( flag_jump_bsl > 0x00 ) {
nexpaq 0:b86eda0e990d 174 flag_jump_bsl = 0x00;
nexpaq 0:b86eda0e990d 175 np_system_disable_interrupt();
nexpaq 0:b86eda0e990d 176 #ifdef DBG_MSG
nexpaq 0:b86eda0e990d 177 printf("Entering NP Bootloader\n\r");
nexpaq 0:b86eda0e990d 178 #endif
nexpaq 0:b86eda0e990d 179 #ifdef TOOLCHAIN_ARM_STD
nexpaq 0:b86eda0e990d 180 __asm {
nexpaq 0:b86eda0e990d 181 mov _r0, #0x20000008
nexpaq 0:b86eda0e990d 182 ldr _pc, [_r0]
nexpaq 0:b86eda0e990d 183 }
nexpaq 0:b86eda0e990d 184 }
nexpaq 0:b86eda0e990d 185 __asm {
nexpaq 0:b86eda0e990d 186 mov _r0, _r0
nexpaq 0:b86eda0e990d 187 mov _r0, _r0
nexpaq 0:b86eda0e990d 188 }
nexpaq 0:b86eda0e990d 189 #else
nexpaq 0:b86eda0e990d 190 __asm volatile(
nexpaq 0:b86eda0e990d 191 " LDR R0, =0x20000008 \n"
nexpaq 0:b86eda0e990d 192 " LDR PC, [R0] \n"
nexpaq 0:b86eda0e990d 193 );
nexpaq 0:b86eda0e990d 194 }
nexpaq 0:b86eda0e990d 195 __asm volatile("nop \n");
nexpaq 0:b86eda0e990d 196 __asm volatile("nop \n");
nexpaq 0:b86eda0e990d 197 #endif
nexpaq 0:b86eda0e990d 198 }
nexpaq 0:b86eda0e990d 199 }
nexpaq 0:b86eda0e990d 200