source: azure_iot_hub_riscv/trunk/asp_baseplatform/OBJ/K210_GCC/TEST/test.c@ 453

Last change on this file since 453 was 453, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 6.1 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2012 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * スコード中に含まれていること.
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23 * と.
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27 * 報告すること.
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32 * 免責すること.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38 * の責任を負わない.
39 *
40 * $Id$
41 */
42
43/*
44 * D13にUSER-SWを設定した場合、設定により割込みを起動する
45 * WDTに割込みモードのWDT設定を行う
46 */
47
48#include <kernel.h>
49#include <t_syslog.h>
50#include <t_stdlib.h>
51#include "syssvc/serial.h"
52#include "syssvc/syslog.h"
53#include "target_syssvc.h"
54#include "kernel_cfg.h"
55#include "device.h"
56#include "pinmode.h"
57#include "test.h"
58
59/*
60 * サービスコールのエラーのログ出力
61 */
62Inline void
63svc_perror(const char *file, int_t line, const char *expr, ER ercd)
64{
65 if (ercd < 0) {
66 t_perror(LOG_ERROR, file, line, expr, ercd);
67 }
68}
69
70#define SVC_PERROR(expr) svc_perror(__FILE__, __LINE__, #expr, (expr))
71
72#define SW_PIN 13
73
74
75static void
76pinModex(uint8_t dwPin, uint8_t dwMode){
77 int gpionumx = gpio_get_gpiohno(getGpioPin(dwPin), true);
78 GPIO_Init_t init = {0};
79 int gpionum;
80
81 gpionum = gpionumx;
82 syslog_4(LOG_NOTICE, "## dwPin(%d) MD_PIN_MAP(%d) gpionum(%d) gpionumx(%d) ##", dwPin, getGpioPin(dwPin), gpionum, gpionumx);
83 if(gpionum >= 0){
84 uint8_t function = FUNC_GPIOHS0 + gpionum;
85 fpioa_set_function(getGpioPin(dwPin), function);
86 switch(dwMode){
87 case INPUT:
88 init.mode = GPIO_MODE_INPUT;
89// init.mode = GPIO_MODE_IT_RISING;
90 init.pull = GPIO_NOPULL;
91 break;
92 case INPUT_PULLDOWN:
93 init.mode = GPIO_MODE_INPUT;
94 init.pull = GPIO_PULLDOWN;
95 break;
96 case INPUT_PULLUP:
97 init.mode = GPIO_MODE_INPUT;
98 init.pull = GPIO_PULLUP;
99 break;
100 case OUTPUT:
101 default:
102 init.mode = GPIO_MODE_OUTPUT;
103 init.pull = GPIO_PULLDOWN;
104 break;
105 }
106 gpio_setup(TADR_GPIOHS_BASE, &init, (uint8_t)gpionum);
107 }
108 return ;
109}
110
111/*
112 * WDT割込みコールバック
113 */
114static void
115wdt_int_handler(WDT_Handle_t *hwdt)
116{
117 syslog_1(LOG_NOTICE, "wdt_int_handler[%x] !", hwdt);
118}
119
120/*
121 * USER-SW割込みハンドラ
122 */
123void
124sw_int_handler(void)
125{
126 uint32_t ipr = sil_rew_mem((uint32_t *)(TADR_GPIOHS_BASE+TOFF_GPIOHS_RISE_IP));
127 uint32_t ipf = sil_rew_mem((uint32_t *)(TADR_GPIOHS_BASE+TOFF_GPIOHS_FALL_IP));
128 syslog_2(LOG_EMERG, "## sw_int_handler r[%08x] f(%08x] ##", ipr, ipf);
129 sil_wrw_mem((uint32_t *)(TADR_GPIOHS_BASE+TOFF_GPIOHS_RISE_IP), ipr);
130}
131
132/*
133 * メインタスク
134 */
135void
136main_task(intptr_t exinf)
137{
138 WDT_Handle_t *hwdt;
139 ER_UINT ercd;
140 int i;
141 uint32_t cnt;
142
143 SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
144 syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);
145
146 /*
147 * シリアルポートの初期化
148 *
149 * システムログタスクと同じシリアルポートを使う場合など,シリアル
150 * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
151 * ない.
152 */
153 ercd = serial_opn_por(TASK_PORTID);
154 if (ercd < 0 && MERCD(ercd) != E_OBJ) {
155 syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.",
156 itron_strerror(ercd), SERCD(ercd));
157 }
158 SVC_PERROR(serial_ctl_por(TASK_PORTID,
159 (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));
160
161 pinModex(SW_PIN, INPUT);
162 hwdt = wdt_init(WDOG1_PORTID);
163 hwdt->callback = wdt_int_handler;
164 cnt = wdt_start(hwdt, WDT_MODE_INTERRUPT, 10000);
165 syslog_1(LOG_NOTICE, "## cnt(%d) ##", cnt);
166 for(i = 0 ; i < 500000 ; i++){
167 syslog_1(LOG_NOTICE, "## sw(%d) ##", digitalRead(SW_PIN));
168 dly_tsk(1000);
169 if(i == 15){
170 wdt_deinit(hwdt);
171 syslog_0(LOG_NOTICE, "WDT STOP");
172 }
173 }
174 slp_tsk();
175
176 syslog(LOG_NOTICE, "Sample program ends.");
177 SVC_PERROR(ext_ker());
178 assert(0);
179}
Note: See TracBrowser for help on using the repository browser.