led_write(Led1, LedOff);
led_write(Led2, LedOff);
- vs1011e_volume_write(0x10, 0x10);
+ vs1011e_volume_write(0x02, 0x02);
return 0;
}
#include "task.h"
/* ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë */
-kz_thread_id_t kz_run(kz_func_t func, char *name, int priority, int stacksize,
- int argc, char *argv[]);
+kz_thread_id_t kz_run(
+ kz_func_t func, char *name,
+ int priority, int stacksize,
+ int argc, char *argv[]);
void kz_exit(void);
int kz_wait(void);
int kz_sleep(void);
int kx_send(kz_msgbox_id_t id, int size, char *p);
/* ¥é¥¤¥Ö¥é¥ê´Ø¿ô */
-void kz_start(kz_func_t func, char *name, int priority, int stacksize,
- int argc, char *argv[]);
+void kz_start(
+ kz_func_t func, char *name,
+ int priority, int stacksize,
+ int argc, char *argv[]);
void kz_sysdown(void);
void kz_syscall(kz_syscall_type_t type, kz_syscall_param_t *param);
void kz_srvcall(kz_syscall_type_t type, kz_syscall_param_t *param);
*(.strings)
*(.rodata)
*(.rodata.*)
+ . = ALIGN(4);
_erodata = . ;
} > ram
/* ¥·¥¹¥Æ¥à¡¦¥¿¥¹¥¯¤È¥æ¡¼¥¶¡¦¥¿¥¹¥¯¤Îµ¯Æ° */
static int start_threads(int argc, char *argv[])
{
- kz_run(driver_console, "dConsole", 1, 0x200, 0, NULL);
- kz_run(driver_timer, "dTimer", 2, 0x200, 0, NULL);
- kz_run(task_display, "tDisplay", 5, 0x400, 0, NULL);
- kz_run(task_audio, "tAudio", 6, 0x400, 0, NULL);
- kz_run(task_command, "tCommand", 7, 0x400, 0, NULL);
- kz_run(task_input, "tInput", 8, 0x400, 0, NULL);
+ kz_run(driver_console, "dConsole", 1, 0x200, 0, NULL);
+ kz_run(driver_timer, "dTimer", 2, 0x200, 0, NULL);
+ kz_run(task_audio, "tAudio", 5, 0x800, 0, NULL);
+ kz_run(task_display, "tDisplay", 6, 0x800, 0, NULL);
+ kz_run(task_input, "tInput", 10, 0x800, 0, NULL);
+ kz_run(task_command, "tCommand", 12, 0x800, 0, NULL);
kz_chpri(15); /* Í¥Àè½ç°Ì¤ò²¼¤²¤Æ¡¤¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤Ë°Ü¹Ô¤¹¤ë */
INTR_ENABLE; /* ³ä¹þ¤ß͸ú¤Ë¤¹¤ë */
return 0;
}
+
/* ¥á¥â¥ê¡¦¥×¡¼¥ë¤ÎÄêµÁ(¸Ä¡¹¤Î¥µ¥¤¥º¤È¸Ä¿ô) */
static kzmem_pool pool[] = {
- { 16, 8, NULL }, { 32, 8, NULL }, { 64, 4, NULL },
+ { 8, 8, NULL },
+ { 16, 8, NULL },
+ { 32, 8, NULL },
+ { 64, 8, NULL },
+ { 128, 4, NULL },
+ { 256, 4, NULL },
+ { 1024, 4, NULL },
};
#define MEMORY_AREA_NUM (sizeof(pool) / sizeof(*pool))
#include "task_audio.h"
#include "vs1011e.h"
#include "kozos.h"
+#include "pff.h"
#define AUDIO_CMD_PULSE 'p'
return 0;
}
+int8 readfunc(uint8 * buf, const uint16 len)
+{
+ WORD cnt;
+ pf_read(buf, len, &cnt);
+ return cnt;
+}
+
+static int play(const char *filename)
+{
+ FRESULT r = pf_open("splash.mp3");
+ if (r != FR_OK) {
+ return 1;
+ }
+ vs1011e_play(readfunc);
+ return 0;
+}
+
int task_audio(int argc, char *argv[])
{
int size;
char *p;
+ FATFS fatfs;
+ DIR dir;
+ FILINFO filinfo;
+
+ vs1011e_volume_write(0x02, 0x02);
+ while (1) {
+ if (pf_mount(&fatfs)) {
+ continue;
+ }
+ while (1) {
+ if (pf_opendir(&dir, "")) {
+ break;
+ }
+ while (!pf_readdir(&dir, &filinfo) && filinfo.fname[0]) {
+ if (!(filinfo.fattrib & (AM_DIR | AM_HID))) {
+ if (play(filinfo.fname)) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
while (1) {
kz_recv(MSGBOX_ID_AUDIO, &size, &p);
audio_cmdproc(p);
return 0;
}
+
#define MAX_BIT_COUNT (64)
+#define TCNT_COUNT_START() (*H8_3069F_TSTR |= (1 << 0))
+#define TCNT_COUNT_STOP() (*H8_3069F_TSTR &= ~(1 << 0))
+#define TCNT_COUNT_VALUE() (((*H8_3069F_16TCNT0H) << 8) | ((*H8_3069F_16TCNT0L) << 0))
+#define TCNT_COUNT_RESET() \
+ do { \
+ *H8_3069F_16TCNT0H = 0; \
+ *H8_3069F_16TCNT0L = 0; \
+ } while (0)
+
+#define TCR0_SETUP() (*H8_3069F_16TCR0 = 0x03)
+#define TMRINT_ENABLE() (*H8_3069F_TISRC |= (1 << 4))
+#define TMRINT_FLAG_CLEAR() (*H8_3069F_TISRC &= ~(1 << 0))
+#define IRQ4_ENABLE() \
+ do { \
+ (*H8_3069F_ISCR |= (1 << 4)); \
+ (*H8_3069F_IER |= (1 << 4)); \
+ } while (0)
+
typedef enum {
WaitLeader,
FoundLeader,
{
switch (irs) {
case WaitLeader:
- *H8_3069F_TSTR |= (1 << 0);
+ TCNT_COUNT_RESET();
+ TCNT_COUNT_START();
bitcnt = 0;
tmrovf = 0;
irs = FoundLeader;
if ((bitcnt % 8) == 0) {
data[bitcnt / 8] = 0;
}
- uint16 tmrval =
- ((*H8_3069F_16TCNT0H) << 8) |
- ((*H8_3069F_16TCNT0L) << 0);
+ uint16 tmrval = TCNT_COUNT_VALUE();
if (tmrval > 0x1077) {
data[bitcnt / 8] |= (1 << (bitcnt % 8));
}
}
break;
case Received:
- *H8_3069F_TSTR &= ~(1 << 0);
+ TCNT_COUNT_STOP();
break;
default:
+ TCNT_COUNT_STOP();
break;
}
- *H8_3069F_16TCNT0H = 0;
- *H8_3069F_16TCNT0L = 0;
+ TCNT_COUNT_RESET();
}
static void remocon_intr_tovf(void)
{
- *H8_3069F_TISRC &= ~(1 << 0);
+ TMRINT_FLAG_CLEAR();
tmrovf = 1;
- *H8_3069F_TSTR &= ~(1 << 0);
+ irs = WaitLeader;
+ TCNT_COUNT_STOP();
}
int task_input(int argc, char *argv[])
/*
* Setup.
*/
-#if 0
kz_setintr(SOFTVEC_TYPE_IR_EDGE, remocon_intr_edge);
kz_setintr(SOFTVEC_TYPE_IR_TOVF, remocon_intr_tovf);
- *H8_3069F_ISCR |= (1 << 4);
- *H8_3069F_IER |= (1 << 4);
-
- *H8_3069F_TISRC |= (1 << 4);
- *H8_3069F_16TCR0 = 0x03;
-#endif
+ TCR0_SETUP();
+ TMRINT_ENABLE();
+ IRQ4_ENABLE();
/*
* Display clear
display_draw_box(nx + 20, ny, nx + 20, ny + 16, 0);
display_draw_logo(nx, ny, 0);
+ display_led_toggle(3);
}
- display_led_toggle(3);
if (tmrovf) {
if (bitcnt == 32) {
}
bitcnt = 0;
tmrovf = 0;
- irs = WaitLeader;
}
}