From 49060a965b52b879062edfc39364a67adb1e70d2 Mon Sep 17 00:00:00 2001 From: zhangzheng <1358745329@qq.com> Date: Fri, 27 Dec 2024 08:25:51 +0800 Subject: [PATCH] =?UTF-8?q?snd=E9=A9=B1=E5=8A=A8=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 14 +- mkrtos_configs/ATSURFF437.dts | 30 +- mkrtos_user/lib/mlibc/src/stdio/vfprintf.c | 8 +- mkrtos_user/lib/sys_svr/inc/rpc_prot.h | 5 + mkrtos_user/lib/sys_svr/inc/snd_drv_cli.h | 8 + mkrtos_user/lib/sys_svr/inc/snd_drv_svr.h | 9 + mkrtos_user/lib/sys_svr/inc/snd_drv_types.h | 9 + mkrtos_user/lib/sys_svr/src/snd_drv_cli.c | 73 ++ mkrtos_user/lib/sys_svr/src/snd_drv_svr.c | 51 ++ mkrtos_user/lib/sys_util/src/u_irq_helper.c | 10 +- mkrtos_user/server/init/src/heap_stack.c | 2 +- mkrtos_user/server/init/src/init.cfg | 17 +- mkrtos_user/server/init/src/namespace.c | 3 +- mkrtos_user/server/shell/src/heap_stack.c | 4 +- mkrtos_user/user/app/CMakeLists.txt | 6 +- .../user/app/nes_simulator/heap_stack.c | 2 +- mkrtos_user/user/app/nes_simulator/nes.S | 2 +- ...级马里奥兄弟3[MM之神汉化](JP)[ACT](3Mb).nes | Bin 0 -> 393232 bytes .../user/app/nes_simulator/vnes/6502.S | 13 +- .../user/app/nes_simulator/vnes/nes_apu.c | 6 +- .../user/app/nes_simulator/vnes/nes_main.c | 47 +- .../user/drv/ATSURFF437/CMakeLists.txt | 1 + .../ATSURFF437/eth/at_surf_f437_board_emac.c | 2 + .../user/drv/ATSURFF437/eth/mk_eth_drv_impl.c | 2 +- .../user/drv/ATSURFF437/pca9555/pca9555.c | 14 + .../user/drv/ATSURFF437/pin/mk_pin_drv_impl.c | 18 + .../user/drv/ATSURFF437/snd/CMakeLists.txt | 89 +++ .../user/drv/ATSURFF437/snd/armv7_8m/link.lds | 124 ++++ .../drv/ATSURFF437/snd/at32f435_437_conf.h | 176 +++++ .../ATSURFF437/snd/at_surf_f437_board_audio.c | 640 ++++++++++++++++++ .../ATSURFF437/snd/at_surf_f437_board_audio.h | 200 ++++++ .../user/drv/ATSURFF437/snd/heap_stack.c | 17 + mkrtos_user/user/drv/ATSURFF437/snd/main.c | 81 +++ .../user/drv/ATSURFF437/snd/mk_snd_drv_impl.c | 92 +++ .../user/drv/ATSURFF437/snd/mk_snd_drv_impl.h | 5 + mkrtos_user/user/drv/CMakeLists.txt | 8 +- mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.c | 2 +- mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.h | 6 +- mkrtos_user/user/drv/lib/mk_pin/mk_pin_drv.h | 2 + .../user/drv/lib/mk_snd/CMakeLists.txt | 38 ++ mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.c | 120 ++++ mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.h | 37 + 42 files changed, 1934 insertions(+), 59 deletions(-) create mode 100644 mkrtos_user/lib/sys_svr/inc/snd_drv_cli.h create mode 100644 mkrtos_user/lib/sys_svr/inc/snd_drv_svr.h create mode 100644 mkrtos_user/lib/sys_svr/inc/snd_drv_types.h create mode 100644 mkrtos_user/lib/sys_svr/src/snd_drv_cli.c create mode 100644 mkrtos_user/lib/sys_svr/src/snd_drv_svr.c create mode 100644 mkrtos_user/user/app/nes_simulator/nes_rom/超级马里奥兄弟3[MM之神汉化](JP)[ACT](3Mb).nes create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/CMakeLists.txt create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/armv7_8m/link.lds create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/at32f435_437_conf.h create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.c create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.h create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/main.c create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.c create mode 100644 mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.h create mode 100644 mkrtos_user/user/drv/lib/mk_snd/CMakeLists.txt create mode 100644 mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.c create mode 100644 mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 617ea7c7d..ac8c5393e 100755 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -153,10 +153,20 @@ "at_surf_f437_board_emac.h": "c", "at_surf_f437_board_pca9555.h": "c", "net_drv_svr.h": "c", - "u_factory.h": "c" + "u_factory.h": "c", + "mk_eth_drv_impl.h": "c", + "mk_snd_drv.h": "c", + "at_surf_f437_board_player.h": "c", + "mk_snd_drv_impl.h": "c", + "ns_cli.h": "c", + "snd_drv_svr.h": "c", + "net_drv_cli.h": "c", + "lwiperf.h": "c", + "stdio_impl.h": "c", + "stack.h": "c" }, "cortex-debug.showRTOS": false, - "cortex-debug.variableUseNaturalFormat": false, + "cortex-debug.variableUseNaturalFormat": true, "C_Cpp.default.systemIncludePath": [""], "C_Cpp.default.forcedInclude": ["${workspaceFolder}/build/autoconf.h"] } \ No newline at end of file diff --git a/mkrtos_configs/ATSURFF437.dts b/mkrtos_configs/ATSURFF437.dts index ed8d7b7e2..2dbc2d4c3 100644 --- a/mkrtos_configs/ATSURFF437.dts +++ b/mkrtos_configs/ATSURFF437.dts @@ -1,14 +1,5 @@ /dts-v1/; / { - // usart0:usart_0 { - // compatible = "st,usart"; - // regs = <0x0000000 0x1000>; - // baud = <115200>; - // stopbits = <1>; - // }; - // log { - // dev = <&usart0>; - // }; pin { compatible = "at32f43x,pin"; regs = < @@ -25,13 +16,16 @@ 0x40023800 0x400 /*CRM*/ 0x60000000 0x100000 /*XMC_MEM*/ >; + /*TODO: pca9555 set*/ + /*TODO: pin set*/ }; - i2c2:i2c@40005800 { + i2c2:i2c2 { compatible = "at32f43x,i2c2"; regs = < 0x40023800 0x400 /*CRM*/ 0x40005800 0x400 /*I2C2*/ >; + /*TODO: pin set*/ }; pca9555 { compatible = "at32f43x,pca9555"; @@ -48,5 +42,21 @@ 0x40013800 0x400 /*EXINT & SCFG*/ 0x40013C00 0x400 /*EXINT & SCFG*/ >; + /*TODO: pin set*/ + /*TODO: pca9555 set*/ + }; + snd { + compatible = "at32f43x,snd"; + regs = < + 0x40023800 0x400 /*CRM*/ + 0x40003800 0x400 /*SPI2/I2S2*/ + 0x40000000 0x20000 + /*0x40010400 0x400 TMR8*/ + /*0x40017800 0x400 I2S2EXT*/ + 0x40026400 0x400 /*DMA1_2*/ + >; + /*TODO: pin set*/ + /*TODO: pca9555 set*/ + /*TODO: i2c set*/ }; }; diff --git a/mkrtos_user/lib/mlibc/src/stdio/vfprintf.c b/mkrtos_user/lib/mlibc/src/stdio/vfprintf.c index 29b78c475..81bfc9406 100644 --- a/mkrtos_user/lib/mlibc/src/stdio/vfprintf.c +++ b/mkrtos_user/lib/mlibc/src/stdio/vfprintf.c @@ -52,7 +52,7 @@ static const unsigned char states[]['z'-'A'+1] = { S('o') = UINT, S('u') = UINT, S('x') = UINT, S('X') = UINT, S('e') = DBL, S('f') = DBL, S('g') = DBL, S('a') = DBL, S('E') = DBL, S('F') = DBL, S('G') = DBL, S('A') = DBL, - S('c') = CHAR, S('C') = INT, + S('c') = INT, S('C') = UINT, S('s') = PTR, S('S') = PTR, S('p') = UIPTR, S('n') = PTR, S('m') = NOARG, S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE, @@ -62,7 +62,7 @@ static const unsigned char states[]['z'-'A'+1] = { S('o') = ULONG, S('u') = ULONG, S('x') = ULONG, S('X') = ULONG, S('e') = DBL, S('f') = DBL, S('g') = DBL, S('a') = DBL, S('E') = DBL, S('F') = DBL, S('G') = DBL, S('A') = DBL, - S('c') = INT, S('s') = PTR, S('n') = PTR, + S('c') = UINT, S('s') = PTR, S('n') = PTR, S('l') = LLPRE, }, { /* 2: ll-prefixed */ S('d') = LLONG, S('i') = LLONG, @@ -438,7 +438,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, unsigned st, ps; int cnt=0, l=0; size_t i; - char buf[sizeof(uintmax_t)*3+3+LDBL_MANT_DIG/4]; + char buf[sizeof(uintmax_t)*3]; const char *prefix; int t, pl; wchar_t wc[2], *ws; @@ -589,6 +589,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, } p = MAX(p, z-a + !arg.i); break; + narrow_c: case 'c': *(a=z-(p=1))=arg.i; fl &= ~ZERO_PAD; @@ -603,6 +604,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, fl &= ~ZERO_PAD; break; case 'C': + if (!arg.i) goto narrow_c; wc[0] = arg.i; wc[1] = 0; arg.p = wc; diff --git a/mkrtos_user/lib/sys_svr/inc/rpc_prot.h b/mkrtos_user/lib/sys_svr/inc/rpc_prot.h index 246e715f3..9be0b5a57 100644 --- a/mkrtos_user/lib/sys_svr/inc/rpc_prot.h +++ b/mkrtos_user/lib/sys_svr/inc/rpc_prot.h @@ -53,3 +53,8 @@ #define NET_DRV_WRITE ((umword_t)0) //!< 网络驱动写 #define NET_DRV_READ ((umword_t)1) //!< 网络驱动读 #define NET_DRV_MAP ((umword_t)2) //!< net map + +#define SND_DRV_PROT 0x0009 +#define SND_DRV_WRITE ((umword_t)0) //!< snd驱动写 +#define SND_DRV_READ ((umword_t)1) //!< snd驱动读 +#define SND_DRV_MAP ((umword_t)2) //!< snd map diff --git a/mkrtos_user/lib/sys_svr/inc/snd_drv_cli.h b/mkrtos_user/lib/sys_svr/inc/snd_drv_cli.h new file mode 100644 index 000000000..90186bbbb --- /dev/null +++ b/mkrtos_user/lib/sys_svr/inc/snd_drv_cli.h @@ -0,0 +1,8 @@ +#pragma once +#include "u_types.h" +#include "u_rpc_svr.h" +#include "u_slist.h" + +int snd_drv_cli_write(obj_handler_t dm9000_obj, obj_handler_t shm_obj, int len); +int snd_drv_cli_read(obj_handler_t dm9000_obj, obj_handler_t shm_obj); +int snd_drv_cli_map(obj_handler_t dm9000_obj, obj_handler_t *sem_obj); diff --git a/mkrtos_user/lib/sys_svr/inc/snd_drv_svr.h b/mkrtos_user/lib/sys_svr/inc/snd_drv_svr.h new file mode 100644 index 000000000..655226b3d --- /dev/null +++ b/mkrtos_user/lib/sys_svr/inc/snd_drv_svr.h @@ -0,0 +1,9 @@ +#pragma once +#include "u_types.h" +#include "u_rpc_svr.h" +#include "u_slist.h" +#include "snd_drv_types.h" +int snd_drv_write(obj_handler_t obj, int len); +int snd_drv_read(obj_handler_t obj, int len); +int snd_drv_map(obj_handler_t *hd); +void snd_drv_init(snd_drv_t *ns); diff --git a/mkrtos_user/lib/sys_svr/inc/snd_drv_types.h b/mkrtos_user/lib/sys_svr/inc/snd_drv_types.h new file mode 100644 index 000000000..50cda719c --- /dev/null +++ b/mkrtos_user/lib/sys_svr/inc/snd_drv_types.h @@ -0,0 +1,9 @@ +#pragma once +#include "u_types.h" +#include "u_rpc_svr.h" +#include "u_slist.h" + +typedef struct snd_drv +{ + rpc_svr_obj_t svr; +} snd_drv_t; diff --git a/mkrtos_user/lib/sys_svr/src/snd_drv_cli.c b/mkrtos_user/lib/sys_svr/src/snd_drv_cli.c new file mode 100644 index 000000000..e33c80ab6 --- /dev/null +++ b/mkrtos_user/lib/sys_svr/src/snd_drv_cli.c @@ -0,0 +1,73 @@ +#include "rpc_prot.h" +#include "snd_drv_cli.h" +#include "snd_drv_types.h" +#include "u_rpc.h" +#include "u_rpc_svr.h" +#include "u_arch.h" +#include "u_rpc_buf.h" +#include "u_hd_man.h" +#include "u_rpc_buf.h" +#include +#include +#include + +RPC_GENERATION_CALL2(snd_drv_t, SND_DRV_PROT, SND_DRV_WRITE, write, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj, + rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) +int snd_drv_cli_write(obj_handler_t dm9000_obj, obj_handler_t shm_obj, int len) +{ + rpc_obj_handler_t_t rpc_hd = { + .data = shm_obj, + }; + rpc_int_t rpc_len = { + .data = len, + }; + + msg_tag_t tag = snd_drv_t_write_call(dm9000_obj, &rpc_hd, &rpc_len); + + return msg_tag_get_val(tag); +} +RPC_GENERATION_CALL2(snd_drv_t, SND_DRV_PROT, SND_DRV_READ, read, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj, + rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) + +int snd_drv_cli_read(obj_handler_t dm9000_obj, obj_handler_t shm_obj) +{ + rpc_obj_handler_t_t rpc_hd = { + .data = shm_obj, + }; + rpc_int_t rpc_len = { + .data = 0, + }; + msg_tag_t tag = snd_drv_t_read_call(dm9000_obj, &rpc_hd, &rpc_len); + + return msg_tag_get_val(tag); +} +RPC_GENERATION_CALL1(snd_drv_t, SND_DRV_PROT, SND_DRV_MAP, map, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) + +int snd_drv_cli_map(obj_handler_t dm9000_obj, obj_handler_t *sem_obj) +{ + assert(sem_obj); + + obj_handler_t newfd; + + newfd = handler_alloc(); + if (newfd == HANDLER_INVALID) + { + return -ENOENT; + } + rpc_obj_handler_t_t rpc_sem_obj = { + .data = newfd, + .del_map_flags = VPAGE_FLAGS_MAP, + }; + msg_tag_t tag = snd_drv_t_map_call(dm9000_obj, &rpc_sem_obj); + + if (msg_tag_get_val(tag) < 0) + { + handler_free(newfd); + return msg_tag_get_val(tag); + } + *sem_obj = newfd; + return msg_tag_get_val(tag); +} diff --git a/mkrtos_user/lib/sys_svr/src/snd_drv_svr.c b/mkrtos_user/lib/sys_svr/src/snd_drv_svr.c new file mode 100644 index 000000000..0cc523676 --- /dev/null +++ b/mkrtos_user/lib/sys_svr/src/snd_drv_svr.c @@ -0,0 +1,51 @@ +#include "rpc_prot.h" +#include "snd_drv_svr.h" +#include "snd_drv_types.h" +#include "u_rpc.h" +#include "u_rpc_svr.h" +#include "u_arch.h" +#include "u_rpc_buf.h" +#include "u_hd_man.h" +#include "u_rpc_buf.h" +#include + +RPC_GENERATION_OP2(snd_drv_t, SND_DRV_PROT, SND_DRV_WRITE, write, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj, + rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) +{ + return snd_drv_write(rpc_hd_get(0), len->data); +} +RPC_GENERATION_DISPATCH2(snd_drv_t, SND_DRV_PROT, SND_DRV_WRITE, write, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, svr_hd, + rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, type) + +RPC_GENERATION_OP2(snd_drv_t, SND_DRV_PROT, SND_DRV_READ, read, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj, + rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) +{ + return snd_drv_read(rpc_hd_get(0), len->data); +} + +RPC_GENERATION_DISPATCH2(snd_drv_t, SND_DRV_PROT, SND_DRV_READ, read, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj, + rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) + +RPC_GENERATION_OP1(snd_drv_t, SND_DRV_PROT, SND_DRV_MAP, map, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) +{ + int ret = snd_drv_map(&cli_hd->data); + if (ret < 0) + { + printf("snd drv aailed to request map"); + } + return ret; +} +RPC_GENERATION_DISPATCH1(snd_drv_t, SND_DRV_PROT, SND_DRV_MAP, map, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) + +RPC_DISPATCH3(snd_drv_t, SND_DRV_PROT, typeof(SND_DRV_READ), SND_DRV_WRITE, write, SND_DRV_READ, read, SND_DRV_MAP, map) + +void snd_drv_init(snd_drv_t *ns) +{ + rpc_svr_obj_init(&ns->svr, rpc_snd_drv_t_dispatch, SND_DRV_PROT); +} diff --git a/mkrtos_user/lib/sys_util/src/u_irq_helper.c b/mkrtos_user/lib/sys_util/src/u_irq_helper.c index 27e3e1788..c21d7d1ca 100644 --- a/mkrtos_user/lib/sys_util/src/u_irq_helper.c +++ b/mkrtos_user/lib/sys_util/src/u_irq_helper.c @@ -7,7 +7,7 @@ int u_irq_request(int irq_no, void *stack, void *msg_buf, obj_handler_t *ret_irq_obj, void (*irq_func)(void), u_irq_prio_t prio) { - static obj_handler_t irq_obj; + obj_handler_t irq_obj; irq_obj = handler_alloc(); if (irq_obj == HANDLER_INVALID) @@ -28,16 +28,16 @@ int u_irq_request(int irq_no, void *stack, void *msg_buf, obj_handler_t *ret_irq } obj_handler_t th_hd; + if (ret_irq_obj) + { + *ret_irq_obj = irq_obj; + } int ret = u_thread_create(&th_hd, stack, msg_buf, irq_func); if (ret < 0) { handler_free_umap(irq_obj); return ret; } - if (ret_irq_obj) - { - *ret_irq_obj = irq_obj; - } u_thread_run(th_hd, IRQ_THREAD_PRIO); return ret; diff --git a/mkrtos_user/server/init/src/heap_stack.c b/mkrtos_user/server/init/src/heap_stack.c index 55d2a0861..44e2ed2a2 100644 --- a/mkrtos_user/server/init/src/heap_stack.c +++ b/mkrtos_user/server/init/src/heap_stack.c @@ -15,7 +15,7 @@ #define STACK_SIZE (4 * 1024) //(1024 + 256) #else #define HEAP_SIZE (2 * 1024) -#define STACK_SIZE (3 * 1024) //(1024 + 256) +#define STACK_SIZE (4 * 1024) //(1024 + 256) #endif #if defined(__CC_ARM) diff --git a/mkrtos_user/server/init/src/init.cfg b/mkrtos_user/server/init/src/init.cfg index 56cf2384c..d650f4d8e 100644 --- a/mkrtos_user/server/init/src/init.cfg +++ b/mkrtos_user/server/init/src/init.cfg @@ -1,13 +1,12 @@ #一次读取一行,每行代表启动的应用程序 # fatfs -# dm9000_drv -# net cpiofs -m /bin -pin -i2c -pca9555 -display -eth -nes -net +# pin +# i2c +# pca9555 +# display +# eth +# snd +# net +# nes sh \ No newline at end of file diff --git a/mkrtos_user/server/init/src/namespace.c b/mkrtos_user/server/init/src/namespace.c index f196a58f9..74da0445d 100644 --- a/mkrtos_user/server/init/src/namespace.c +++ b/mkrtos_user/server/init/src/namespace.c @@ -193,6 +193,7 @@ static ns_node_t *node_lookup(ns_node_t *dir, const char *name, } if (name[0] == 0) { + *ret_inx = 0; return dir; } node = dir; @@ -605,7 +606,7 @@ int namespace_query(const char *path, obj_handler_t *hd) if (path[0] == '/' && path[1] == 0) { *hd = ns_hd; - return 0; + return 1; } ns_lock(); node = node_lookup(&ns.root_node, path, &ret_inx); diff --git a/mkrtos_user/server/shell/src/heap_stack.c b/mkrtos_user/server/shell/src/heap_stack.c index 844224655..994a07c10 100644 --- a/mkrtos_user/server/shell/src/heap_stack.c +++ b/mkrtos_user/server/shell/src/heap_stack.c @@ -1,7 +1,7 @@ #include #if !IS_ENABLED(CONFIG_MMU) -#define HEAP_SIZE 2048 -#define STACK_SIZE (3*1024) +#define HEAP_SIZE 32 * 1024 +#define STACK_SIZE (3 * 1024) #if defined(__CC_ARM) #define HEAP_ATTR SECTION("HEAP") __attribute__((zero_init)) diff --git a/mkrtos_user/user/app/CMakeLists.txt b/mkrtos_user/user/app/CMakeLists.txt index b41f4cd5c..4f302e5a4 100644 --- a/mkrtos_user/user/app/CMakeLists.txt +++ b/mkrtos_user/user/app/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required(VERSION 3.13) -add_subdirectory(nes_simulator) +# add_subdirectory(nes_simulator) add_subdirectory(coremark) -add_subdirectory(tinycc-arm-thumb) -add_subdirectory(app_test) +# add_subdirectory(tinycc-arm-thumb) +# add_subdirectory(app_test) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_BOARD_NAME}) add_subdirectory(${CONFIG_BOARD_NAME}) endif() diff --git a/mkrtos_user/user/app/nes_simulator/heap_stack.c b/mkrtos_user/user/app/nes_simulator/heap_stack.c index 796bdb8ef..f1c45a6a0 100644 --- a/mkrtos_user/user/app/nes_simulator/heap_stack.c +++ b/mkrtos_user/user/app/nes_simulator/heap_stack.c @@ -1,5 +1,5 @@ -#define HEAP_SIZE (100 * 1024) +#define HEAP_SIZE (64 * 1024) #define STACK_SIZE (1024 * 3) #if defined(__CC_ARM) diff --git a/mkrtos_user/user/app/nes_simulator/nes.S b/mkrtos_user/user/app/nes_simulator/nes.S index 375f56fba..3efe28586 100644 --- a/mkrtos_user/user/app/nes_simulator/nes.S +++ b/mkrtos_user/user/app/nes_simulator/nes.S @@ -2,7 +2,7 @@ .balign 4 .global nes_rom nes_rom: -.incbin "/Users/zhangzheng/mkrtos-real/mkrtos_user/user/app/nes_simulator/nes_rom/超级玛丽.nes" +.incbin "/Users/zhangzheng/mkrtos-real/mkrtos_user/user/app/nes_simulator/nes_rom/超级马里奥兄弟3[MM之神汉化](JP)[ACT](3Mb).nes" .global nes_rom_end nes_rom_end: .long 0 diff --git a/mkrtos_user/user/app/nes_simulator/nes_rom/超级马里奥兄弟3[MM之神汉化](JP)[ACT](3Mb).nes b/mkrtos_user/user/app/nes_simulator/nes_rom/超级马里奥兄弟3[MM之神汉化](JP)[ACT](3Mb).nes new file mode 100644 index 0000000000000000000000000000000000000000..afcf118879478fa60ab3ff923ba1d57830dc69bb GIT binary patch literal 393232 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%0DKYIH}REW*}{nvg! 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

Z5b7f^9 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
  • 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 literal 0 HcmV?d00001 diff --git a/mkrtos_user/user/app/nes_simulator/vnes/6502.S b/mkrtos_user/user/app/nes_simulator/vnes/6502.S index b2694cad2..5f7cdd5f3 100644 --- a/mkrtos_user/user/app/nes_simulator/vnes/6502.S +++ b/mkrtos_user/user/app/nes_simulator/vnes/6502.S @@ -2249,9 +2249,9 @@ IO_W: //I/O write ldr r2,=io_write_tbl ////改过,加3行 add r2,r2,r4 add r2,r2,r1,lsl#2 //<<2 - ldrmi r1,[r2] ////直接操作pc太他妈危险了 - orr r1,r1,#0x1 - bx r1 + ldrmi r2,[r2] ////直接操作pc太他妈危险了 + orr r2,r2,#0x1 + bx r2 b empty_R //读地址不正确 nop .data @@ -2521,16 +2521,17 @@ joy1_R: //4017 K6502_Read://apu Rendering DPCM channel #5 r0=APU->ApuC5Address不确定正确* //--------------------------------------------------------------- //EXPORT K6502_Read //switch ( wAddr & 0xe000 ) apu.c - stmfd sp!,{lr} - + stmfd sp!,{r4, lr} + mov r4, r1 mov r1,r0,lsr#13 //>>13= & 0xe000 ldr r2,=CPU_RAM//////存储器映象 ram+rom + add r2, r2, r4 ldr r1,[r2,r1,lsl#2] //lookup rom ptr..查找ptr bic r0,r0,#0xe000 //and r0,#0x1fff &0x1fff ldrb r0,[r1,r0] - ldmfd sp!,{lr} + ldmfd sp!,{r4, lr} bx lr // nop //------------------------------------------------------------------------ diff --git a/mkrtos_user/user/app/nes_simulator/vnes/nes_apu.c b/mkrtos_user/user/app/nes_simulator/vnes/nes_apu.c index 927f3baa0..e37cfac93 100644 --- a/mkrtos_user/user/app/nes_simulator/vnes/nes_apu.c +++ b/mkrtos_user/user/app/nes_simulator/vnes/nes_apu.c @@ -30,7 +30,7 @@ #define APU_OVERSAMPLE #define APU_VOLUME_DECAY(x) ((x) -= ((x) >> 7)) //需要用到的汇编的代码及参数 -uint8_t K6502_Read( uint16_t wAddr ); //6502.s +uint8_t K6502_Read( uint16_t wAddr, uint32_t nes_ram_offset ); //6502.s extern uint32_t clocks; //6502.s //noise lookups for both modes */ //噪音查找两种模式 */ @@ -512,6 +512,7 @@ void apu_dmcreload(dmc_t *chan) chan->dma_length = chan->cached_dmalength; chan->irq_occurred = FALSE; } +extern uint32_t nes_ram_offset; /* DELTA MODULATION CHANNEL ** ========================= @@ -540,7 +541,7 @@ int apu_dmc(dmc_t *chan) if (7 == delta_bit) { - chan->cur_byte = K6502_Read(chan->address); //chan->cur_byte = nes6502_getbyte(chan->address);********************* + chan->cur_byte = K6502_Read(chan->address, nes_ram_offset); //chan->cur_byte = nes6502_getbyte(chan->address);********************* /* steal a cycle from CPU偷从CPU周期*/ clocks++; // nes6502_burn(1);//要CPU时钟数加1********************************************************************** @@ -1082,7 +1083,6 @@ void Apu_Write4017(uint8 value, uint32 address ) #endif } - void Apu_Write4015(uint8_t value, uint32_t address ) { apudata_t d; diff --git a/mkrtos_user/user/app/nes_simulator/vnes/nes_main.c b/mkrtos_user/user/app/nes_simulator/vnes/nes_main.c index 13cccd6b5..7bf346cf6 100644 --- a/mkrtos_user/user/app/nes_simulator/vnes/nes_main.c +++ b/mkrtos_user/user/app/nes_simulator/vnes/nes_main.c @@ -9,8 +9,14 @@ #include #include #include -// #include "drv_audio.h" -// #include "drv_input.h" +#include "ns_cli.h" +#include "u_sleep.h" +#include +#include +#include +#include +#include +#include ////////////////////////////////////////////////////////////////////////////////// // 本程序移植自网友ye781205的NES模拟器工程 @@ -495,6 +501,7 @@ void nes_emulate_frame(void) apu_soundoutput(); // 输出游戏声音 framecnt++; nes_frame++; +#if 0 if (nes_frame > jump_frame_cnt) { nes_frame = 0; // 跳帧 @@ -507,6 +514,13 @@ void nes_emulate_frame(void) jump_frame_cnt = 1; } } +#else + + if (nes_frame > NES_SKIP_FRAME) + { + nes_frame = 0; + } +#endif #if 0 printf("fps:%d\n", 1000 / ((sys_read_tick() - st_tick) / framecnt)); #endif @@ -520,9 +534,31 @@ void debug_6502(u16 reg0, u8 reg1) ////////////////////////////////////////////////////////////////////////////////// // nes,音频输出支持部分 +static obj_handler_t snd_drv_hd; +static addr_t addr; +static umword_t size; +static obj_handler_t shm_hd; + // NES打开音频输出 int nes_sound_open(int samples_per_sync, int sample_rate) { + int ret; + msg_tag_t tag; +again: + ret = ns_query("/snd", &snd_drv_hd, 0x1); + if (ret < 0) + { + u_sleep_ms(50); + goto again; + } + shm_hd = handler_alloc(); + assert(shm_hd != HANDLER_INVALID); + tag = facotry_create_share_mem(FACTORY_PROT, vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, shm_hd), + SHARE_MEM_CNT_BUDDY_CNT, 2048); + assert(msg_tag_get_prot(tag) >= 0); + tag = share_mem_map(shm_hd, vma_addr_create(VPAGE_PROT_RW, VMA_ADDR_RESV, 0), &addr, &size); + assert(msg_tag_get_prot(tag) >= 0); + // f1c100s_audio_config(1,16,sample_rate); // f1c100s_audio_open(samples_per_sync*2); return 1; @@ -534,5 +570,10 @@ void nes_sound_close(void) // NES音频输出到SAI缓存 void nes_apu_fill_buffer(int samples, u16 *wavebuf) { - // audio_pcm_play((unsigned char*)wavebuf,APU_PCMBUF_SIZE*2); + memcpy((void *)addr, wavebuf, APU_PCMBUF_SIZE * 2); + int ret = snd_drv_cli_write(snd_drv_hd, shm_hd, APU_PCMBUF_SIZE * 2); + if (ret < 0) + { + printf("snd write error.\n"); + } } diff --git a/mkrtos_user/user/drv/ATSURFF437/CMakeLists.txt b/mkrtos_user/user/drv/ATSURFF437/CMakeLists.txt index 657f373ed..9fce41ef5 100644 --- a/mkrtos_user/user/drv/ATSURFF437/CMakeLists.txt +++ b/mkrtos_user/user/drv/ATSURFF437/CMakeLists.txt @@ -5,3 +5,4 @@ add_subdirectory(display) add_subdirectory(i2c) add_subdirectory(pca9555) add_subdirectory(eth) +add_subdirectory(snd) diff --git a/mkrtos_user/user/drv/ATSURFF437/eth/at_surf_f437_board_emac.c b/mkrtos_user/user/drv/ATSURFF437/eth/at_surf_f437_board_emac.c index fbb4f4362..51c8f7df5 100644 --- a/mkrtos_user/user/drv/ATSURFF437/eth/at_surf_f437_board_emac.c +++ b/mkrtos_user/user/drv/ATSURFF437/eth/at_surf_f437_board_emac.c @@ -480,6 +480,7 @@ error_status emac_speed_config(emac_auto_negotiation_type nego, emac_duplex_type { return ERROR; } + u_sleep_ms(10); } while (!(data & PHY_LINKED_STATUS_BIT) && (timeout < PHY_TIMEOUT)); if (timeout == PHY_TIMEOUT) @@ -501,6 +502,7 @@ error_status emac_speed_config(emac_auto_negotiation_type nego, emac_duplex_type { return ERROR; } + u_sleep_ms(10); } while (!(data & PHY_NEGO_COMPLETE_BIT) && (timeout < PHY_TIMEOUT)); if (timeout == PHY_TIMEOUT) diff --git a/mkrtos_user/user/drv/ATSURFF437/eth/mk_eth_drv_impl.c b/mkrtos_user/user/drv/ATSURFF437/eth/mk_eth_drv_impl.c index 87a3d52dd..dacdc81c7 100644 --- a/mkrtos_user/user/drv/ATSURFF437/eth/mk_eth_drv_impl.c +++ b/mkrtos_user/user/drv/ATSURFF437/eth/mk_eth_drv_impl.c @@ -23,7 +23,7 @@ typedef struct eth_priv_data static eth_priv_data_t eth_priv_data; -static int eth_bus_configure(mk_eth_t *drv, enum mk_eth_ioctl_op op, mk_ioctl_set_info_t *info) +static int eth_bus_configure(mk_eth_t *drv, enum mk_eth_ioctl_op op, mk_eth_ioctl_set_info_t *info) { assert(drv); eth_priv_data_t *priv_data = drv->priv_data; diff --git a/mkrtos_user/user/drv/ATSURFF437/pca9555/pca9555.c b/mkrtos_user/user/drv/ATSURFF437/pca9555/pca9555.c index 55f7d1429..589362133 100644 --- a/mkrtos_user/user/drv/ATSURFF437/pca9555/pca9555.c +++ b/mkrtos_user/user/drv/ATSURFF437/pca9555/pca9555.c @@ -59,6 +59,12 @@ int pca9555_set_mode(pca9555_t *io9555, enum pca9555_io_mode mode, uint16_t val) { io9555->imode &= ~val; } + ret = lseek(io9555->i2c_fd, (0 << 16) | (io9555->i2c_addr), SEEK_SET); + if (ret < 0) + { + printf("%s:%d ret:%d\n", __func__, __LINE__, ret); + return ret; + } const uint8_t write_init_data[] = { PCA_REG_CTRL, io9555->imode & 0xff, @@ -84,6 +90,14 @@ int pca9555_output_write(pca9555_t *io9555, uint16_t val) io9555->odata & 0xff, (io9555->odata >> 8) & 0xff, }; + + ret = lseek(io9555->i2c_fd, (0 << 16) | (io9555->i2c_addr), SEEK_SET); + if (ret < 0) + { + printf("%s:%d ret:%d\n", __func__, __LINE__, ret); + return ret; + } + ret = write(io9555->i2c_fd, write_init_data, sizeof(write_init_data)); if (ret != sizeof(write_init_data)) { diff --git a/mkrtos_user/user/drv/ATSURFF437/pin/mk_pin_drv_impl.c b/mkrtos_user/user/drv/ATSURFF437/pin/mk_pin_drv_impl.c index a3c3faa1b..5c9a1d1c1 100644 --- a/mkrtos_user/user/drv/ATSURFF437/pin/mk_pin_drv_impl.c +++ b/mkrtos_user/user/drv/ATSURFF437/pin/mk_pin_drv_impl.c @@ -153,6 +153,24 @@ static int pin_configure(mk_pin_t *pin, int number, mk_pin_mode_t cfg) gpio_pin_mux_config(pin_port_data, number % 16, cfg.mux_cfg); break; } + case MK_PIN_MODE_MUX_OUTPUT_UP: + { + gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; + gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; + gpio_init_struct.gpio_mode = GPIO_MODE_MUX; + gpio_init_struct.gpio_pull = GPIO_PULL_UP; + gpio_pin_mux_config(pin_port_data, number % 16, cfg.mux_cfg); + break; + } + case MK_PIN_MODE_MUX_OUTPUT_DOWN: + { + gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; + gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; + gpio_init_struct.gpio_mode = GPIO_MODE_MUX; + gpio_init_struct.gpio_pull = GPIO_PULL_DOWN; + gpio_pin_mux_config(pin_port_data, number % 16, cfg.mux_cfg); + break; + } case MK_PIN_MODE_IRQ_RISING: { gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/CMakeLists.txt b/mkrtos_user/user/drv/ATSURFF437/snd/CMakeLists.txt new file mode 100644 index 000000000..9299d5124 --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/CMakeLists.txt @@ -0,0 +1,89 @@ +cmake_minimum_required(VERSION 3.13) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAT32F437ZMT7 -DUSE_STDPERIPH_DRIVER -DAT_SURF_F437_V1 ") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DAT32F437ZMT7 -DUSE_STDPERIPH_DRIVER -DAT_SURF_F437_V1 ") +set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -DAT32F437ZMT7 -DUSE_STDPERIPH_DRIVER -DAT_SURF_F437_V1 ") + +file( + GLOB deps + ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/libraries/drivers/src/*.c + *.c +) + + +add_executable( + snd.elf + ${deps} + ${START_SRC} +) +target_link_libraries( + snd.elf + PUBLIC + -Bstatic + ${LIBC_NAME} + mk_drv + mk_char + --whole-archive + ${START_LIB} + libc_be + sys + sys_util + sys_svr + printf + --no-whole-archive + ${GCC_LIB_PATH}/libgcc.a +) +target_include_directories( + snd.elf + PUBLIC + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/util/inc + + ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/libraries/drivers/inc + ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/libraries/cmsis/cm4/device_support + ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/libraries/cmsis/cm4/core_support + ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/project/at_surf_f437_board/ + ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/middlewares/i2c_application_library + ${CMAKE_CURRENT_SOURCE_DIR}/ + + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc + + ${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_snd + ${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_pin + ${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_pca9555 + ${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_i2c +) +add_dependencies( + snd.elf + ${START_LIB} + sys + sys_util + mk_char + mk_drv + printf + # mk_snd +) +set_target_properties( + snd.elf PROPERTIES LINK_FLAGS + "-T ${CMAKE_CURRENT_LIST_DIR}/${ARCH_NAME}/link.lds ${CORTEX_M_LINK_FLAGS} --gc-section -no-dynamic-linker " + #--no-warn-rwx-segments +) +add_custom_target( + snd_dump ALL + COMMAND + ${CMAKE_OBJDUMP} -s -S snd.elf > ${CMAKE_SOURCE_DIR}/build/output/snd.S + COMMAND + ${CMAKE_READELF} -a snd.elf > ${CMAKE_SOURCE_DIR}/build/output/snd.txt + COMMAND + ${CMAKE_OBJCOPY} -O binary -S snd.elf snd.bin + COMMAND + ${CMAKE_SIZE} snd.elf + COMMAND + ${CMAKE_COMMAND} -E copy snd.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/snd + COMMAND + cp snd.elf ${CMAKE_SOURCE_DIR}/build/output/snd.elf +) + +add_dependencies(snd_dump snd.elf) + \ No newline at end of file diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/armv7_8m/link.lds b/mkrtos_user/user/drv/ATSURFF437/snd/armv7_8m/link.lds new file mode 100644 index 000000000..34fdd0c60 --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/armv7_8m/link.lds @@ -0,0 +1,124 @@ +ENTRY(_start_) + +SECTIONS +{ + .text : { + . = ALIGN(4); + __text_start__ = .; + KEEP(*(.first)) + *(.text) + *(.text.*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(SORT(.rodata.*)) + *(.rodata) + + KEEP(*(.eh_frame*)) + + . = ALIGN(4); + __rel_start__ = .; + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) + __rel_end__ = .; + } + .ARM.exidx : { + . = ALIGN(4); + __exdix_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + /* This is used by the startup in order to initialize the .data secion */ + __exdix_end = .; + } + + .permissions_table : { + . = ALIGN(4); + __permissions_table_start__ = .; + KEEP(*(.permissions_table)) + __permissions_table_end__ = .; + } + + + PROVIDE(__ram_size__ = __bss_end__ - __data_start__); + .data : { + . = ALIGN(4); + __data_start__ = .; + __got_start__ = .; + *(.got) + __got_end__ = .; + . = ALIGN(4); + *(.data) + *(.data.*) + + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + . = ALIGN(4); + _shell_command_start = .; + KEEP(*(shellCommand)) + _shell_command_end = .; + + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + } + + PROVIDE(__heap_size__ = __heap_end__ - __heap_start__); + PROVIDE(__stack_size__ = __stack_end__ - __stack_start__); + .bss : { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + __bss_start__ = .; + *(.bss) + *(COMMON) + + . = ALIGN(4); + __heap_start__ = .; + KEEP(*(.bss.heap)) + __heap_end__ = .; + + . = ALIGN(4); + __stack_start__ = .; + KEEP(*(.bss.stack)) + __stack_end__ = .; + + *(.bss.*) + /* This is used by the startup in order to initialize the .bss secion */ + . = ALIGN(4); + __bss_end__ = .; + } + _end = .; +} diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/at32f435_437_conf.h b/mkrtos_user/user/drv/ATSURFF437/snd/at32f435_437_conf.h new file mode 100644 index 000000000..4d0bb6570 --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/at32f435_437_conf.h @@ -0,0 +1,176 @@ +/** + ************************************************************************** + * @file at32f435_437_conf.h + * @brief at32f435_437 config header file + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F435_437_CONF_H +#define __AT32F435_437_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** + * @brief in the following line adjust the value of high speed external crystal (hext) + * used in your application + * + * tip: to avoid modifying this file each time you need to use different hext, you + * can define the hext value in your toolchain compiler preprocessor. + * + */ +#if !defined HEXT_VALUE +#define HEXT_VALUE ((uint32_t)8000000) /*!< value of the high speed external crystal in hz */ +#endif + +/** + * @brief in the following line adjust the high speed external crystal (hext) startup + * timeout value + */ +#define HEXT_STARTUP_TIMEOUT ((uint16_t)0x3000) /*!< time out for hext start up */ +#define HICK_VALUE ((uint32_t)8000000) /*!< value of the high speed internal clock in hz */ +#define LEXT_VALUE ((uint32_t)32768) /*!< value of the low speed external clock in hz */ + +/* module define -------------------------------------------------------------*/ +#define CRM_MODULE_ENABLED +#define TMR_MODULE_ENABLED +#define ERTC_MODULE_ENABLED +#define GPIO_MODULE_ENABLED +#define I2C_MODULE_ENABLED +#define USART_MODULE_ENABLED +#define PWC_MODULE_ENABLED +#define CAN_MODULE_ENABLED +#define ADC_MODULE_ENABLED +#define DAC_MODULE_ENABLED +#define SPI_MODULE_ENABLED +#define EDMA_MODULE_ENABLED +#define DMA_MODULE_ENABLED +#define DEBUG_MODULE_ENABLED +#define FLASH_MODULE_ENABLED +#define CRC_MODULE_ENABLED +#define WWDT_MODULE_ENABLED +#define WDT_MODULE_ENABLED +#define EXINT_MODULE_ENABLED +#define SDIO_MODULE_ENABLED +#define XMC_MODULE_ENABLED +#define USB_MODULE_ENABLED +#define ACC_MODULE_ENABLED +#define MISC_MODULE_ENABLED +#define QSPI_MODULE_ENABLED +#define DVP_MODULE_ENABLED +#define SCFG_MODULE_ENABLED +#define EMAC_MODULE_ENABLED + +/* includes ------------------------------------------------------------------*/ +#ifdef CRM_MODULE_ENABLED +#include "at32f435_437_crm.h" +#endif +#ifdef TMR_MODULE_ENABLED +#include "at32f435_437_tmr.h" +#endif +#ifdef ERTC_MODULE_ENABLED +#include "at32f435_437_ertc.h" +#endif +#ifdef GPIO_MODULE_ENABLED +#include "at32f435_437_gpio.h" +#endif +#ifdef I2C_MODULE_ENABLED +#include "at32f435_437_i2c.h" +#endif +#ifdef USART_MODULE_ENABLED +#include "at32f435_437_usart.h" +#endif +#ifdef PWC_MODULE_ENABLED +#include "at32f435_437_pwc.h" +#endif +#ifdef CAN_MODULE_ENABLED +#include "at32f435_437_can.h" +#endif +#ifdef ADC_MODULE_ENABLED +#include "at32f435_437_adc.h" +#endif +#ifdef DAC_MODULE_ENABLED +#include "at32f435_437_dac.h" +#endif +#ifdef SPI_MODULE_ENABLED +#include "at32f435_437_spi.h" +#endif +#ifdef DMA_MODULE_ENABLED +#include "at32f435_437_dma.h" +#endif +#ifdef DEBUG_MODULE_ENABLED +#include "at32f435_437_debug.h" +#endif +#ifdef FLASH_MODULE_ENABLED +#include "at32f435_437_flash.h" +#endif +#ifdef CRC_MODULE_ENABLED +#include "at32f435_437_crc.h" +#endif +#ifdef WWDT_MODULE_ENABLED +#include "at32f435_437_wwdt.h" +#endif +#ifdef WDT_MODULE_ENABLED +#include "at32f435_437_wdt.h" +#endif +#ifdef EXINT_MODULE_ENABLED +#include "at32f435_437_exint.h" +#endif +#ifdef SDIO_MODULE_ENABLED +#include "at32f435_437_sdio.h" +#endif +#ifdef XMC_MODULE_ENABLED +#include "at32f435_437_xmc.h" +#endif +#ifdef ACC_MODULE_ENABLED +#include "at32f435_437_acc.h" +#endif +#ifdef MISC_MODULE_ENABLED +#include "at32f435_437_misc.h" +#endif +#ifdef EDMA_MODULE_ENABLED +#include "at32f435_437_edma.h" +#endif +#ifdef QSPI_MODULE_ENABLED +#include "at32f435_437_qspi.h" +#endif +#ifdef SCFG_MODULE_ENABLED +#include "at32f435_437_scfg.h" +#endif +#ifdef EMAC_MODULE_ENABLED +#include "at32f435_437_emac.h" +#endif +#ifdef DVP_MODULE_ENABLED +#include "at32f435_437_dvp.h" +#endif +#ifdef USB_MODULE_ENABLED +#include "at32f435_437_usb.h" +#endif + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.c b/mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.c new file mode 100644 index 000000000..a53e6202d --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.c @@ -0,0 +1,640 @@ +/** + ************************************************************************** + * @file at_surf_f437_board_audio.c + * @brief the driver library of the audio. + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +#include "at_surf_f437_board_audio.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "string.h" +#include "mk_pca9555_drv.h" +#include "u_irq_helper.h" +#include "mk_i2c_drv.h" +#include "u_sleep.h" +#include "u_sys.h" +#include "mk_pin_drv.h" + +/** + * @brief wm8988 register default value + */ +uint16_t reg_addr_data[] = + { + (WM8988_R0_LEFT_INPUT_VOLUME << 9) | 0x012F, /*Left Input Channel Volume*/ + (WM8988_R1_RIGHT_INPUT_VOLUME << 9) | 0x012F, /*Right Input Channel Volume*/ + (WM8988_R2_LOUT1_VOLUME << 9) | 0x0179, /*Left Output Channel Volume*/ + (WM8988_R3_ROUT1_VOLUME << 9) | 0x0179, /*Right Output Channel Volume*/ + (WM8988_R5_ADC_DAC_CONTROL << 9) | 0x0006, /*De-emphasis Control and Digital soft mute*/ + (WM8988_REG_BITW16), + (WM8988_REG_FREQ_48_K), + (WM8988_R10_LEFT_DAC_VOLUME << 9) | 0x01FF, /*Left Digital DAC Volume Control*/ + (WM8988_R11_RIGHT_DAC_VOLUME << 9) | 0x01FF, /*Right Digital DAC Volume Control*/ + (WM8988_R12_BASS_CONTROL << 9) | 0x000F, /*Bass Control*/ + (WM8988_R13_TREBLE_CONTROL << 9) | 0x000F, /*Treble Control*/ + (WM8988_R16_3D_CONTROL << 9) | 0x0000, /*3D stereo Enhancment*/ + (WM8988_R21_LEFT_ADC_VOLUME << 9) | 0x01C3, /*Left ADC Digital Volume*/ + (WM8988_R22_RIGHT_ADC_VOLUME << 9) | 0x01C3, /*Right ADC Digital Volume*/ + (WM8988_R23_ADDITIONAL_1_CONTROL << 9) | 0x00C2, /*Additional Control 1*/ + (WM8988_R24_ADDITIONAL_2_CONTROL << 9) | 0x0000, /*Additional Control 2*/ + (WM8988_R27_ADDITIONAL_3_CONTROL << 9) | 0x0000, /*Additional Control 3*/ + (WM8988_R31_ADC_INPUT_MODE << 9) | 0x0000, /*ADC input mode*/ + // (WM8988_R32_ADC_L_SIGNAL_PATH << 9) | 0x0040, /*ADC Signal Path Control left LINPUT2*/ + // (WM8988_R33_ADC_R_SIGNAL_PATH << 9) | 0x0040, /*ADC Signal Path Control right RINPUT2*/ + (WM8988_R32_ADC_L_SIGNAL_PATH << 9) | 0x0000, /*ADC Signal Path Control left LINPUT1 */ + (WM8988_R33_ADC_R_SIGNAL_PATH << 9) | 0x0000, /*ADC Signal Path Control right RINPUT1*/ + (WM8988_R34_LEFT_OUT_MIX_1 << 9) | 0x0152, /*Left DAC mixer Control*/ + (WM8988_R35_LEFT_OUT_MIX_2 << 9) | 0x0050, /*Left DAC mixer Control*/ + (WM8988_R36_RIGHT_OUT_MIX_1 << 9) | 0x0052, /*Right DAC mixer Control*/ + (WM8988_R37_RIGHT_OUT_MIX_2 << 9) | 0x0150, /*Right DAC mixer Control*/ + (WM8988_R40_LOUT2_VOLUME << 9) | 0x01FF, /*Output left channel volume*/ + (WM8988_R41_ROUT2_VOLUME << 9) | 0x01FF, /*Output left channel volume*/ + (WM8988_R43_LOW_POWER_PALYBACK << 9) | 0x0008, /*Output left channel volume*/ + (WM8988_R25_PWR_1_MGMT << 9) | 0x017C, /*Power Management1*/ + (WM8988_R26_PWR_2_MGMT << 9) | 0x01F8, /*Power Management2*/ +}; +static int pca9555_fd; +static int i2c_fd; +static int pin_fd; +#define DEV_PIN_PATH "/pin" +#define DEV_PCA9555_PATH "/pca9555" +#define DEV_I2C2_PATH "/i2c2" +#define WAV_DECODE_SIZE (367) /* single channel */ +int16_t music_output_buffer[DMA_BUFFER_SIZE]; +audio_codec_type audio_codec; +uint16_t spk_dma_buffer[DMA_BUFFER_SIZE]; +uint16_t mic_dma_buffer[DMA_BUFFER_SIZE]; +void DMA1_Channel3_IRQHandler(void); +void DMA1_Channel4_IRQHandler(void); +volatile uint32_t i2s_dma_tx_end; +volatile uint32_t i2s_dma_rx_end; + +void audio_output_cp(void *src, int len) +{ + audio_wait_data_tx_end(); + memcpy(spk_dma_buffer, src, len); + dma_channel_enable(I2S_DMA_TX_CHANNEL, FALSE); + dma_data_number_set(I2S_DMA_TX_CHANNEL, len >> 1); + dma_channel_enable(I2S_DMA_TX_CHANNEL, TRUE); +} + +/** + * @brief mclk clock conifg + * @param none + * @retval none + */ +void mclk_timer_init(void) +{ + int ret; +#if 0 + gpio_init_type gpio_init_struct; +#endif + tmr_output_config_type tmr_oc_init_structure; + uint16_t prescaler_value = (uint16_t)(sys_read_clk() / 24000000) - 1; + + crm_periph_clock_enable(CRM_TMR8_PERIPH_CLOCK, TRUE); +#if 0 + crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE); + + gpio_default_para_init(&gpio_init_struct); + + gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE6, GPIO_MUX_3); + + gpio_init_struct.gpio_pins = GPIO_PINS_6; + gpio_init_struct.gpio_mode = GPIO_MODE_MUX; + gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; + gpio_init(GPIOC, &gpio_init_struct); +#endif +again: + pin_fd = open(DEV_PIN_PATH, O_RDWR, 0777); + + if (pin_fd < 0) + { + u_sleep_ms(50); + goto again; + } + ret = ioctl(pin_fd, MK_PIN_SET_MODE, ((mk_pin_cfg_t){ + .mode = MK_PIN_MODE_MUX_OUTPUT, + .pin = (2 * 16) + 6, + .cfg = GPIO_MUX_3, + }) + .cfg_raw); + if (ret < 0) + { + printf("gpio init failed.\n"); + while (1) + ; + } + + tmr_base_init(TMR8, 1, prescaler_value); + tmr_cnt_dir_set(TMR8, TMR_COUNT_UP); + tmr_clock_source_div_set(TMR8, TMR_CLOCK_DIV1); + + tmr_output_default_para_init(&tmr_oc_init_structure); + tmr_oc_init_structure.oc_mode = TMR_OUTPUT_CONTROL_PWM_MODE_A; + tmr_oc_init_structure.oc_idle_state = FALSE; + tmr_oc_init_structure.oc_polarity = TMR_OUTPUT_ACTIVE_HIGH; + tmr_oc_init_structure.oc_output_state = TRUE; + tmr_output_channel_config(TMR8, TMR_SELECT_CHANNEL_1, &tmr_oc_init_structure); + tmr_channel_value_set(TMR8, TMR_SELECT_CHANNEL_1, 1); + tmr_output_channel_buffer_enable(TMR8, TMR_SELECT_CHANNEL_1, TRUE); + + /* tmr enable counter */ + tmr_counter_enable(TMR8, TRUE); + tmr_output_enable(TMR8, TRUE); +} + +/** + * @brief audio codec i2s reset + * @param none + * @retval none + */ +void codec_i2s_reset(void) +{ + i2s_enable(SPI1, FALSE); + i2s_enable(I2S_SPIx, FALSE); + dma_channel_enable(I2S_DMA_TX_CHANNEL, FALSE); + dma_channel_enable(I2S_DMA_RX_CHANNEL, FALSE); +} +typedef struct pin_cfg +{ + int pin; + gpio_mux_sel_type mux_type; + int mode; +} pin_cfg_t; + +static const pin_cfg_t audio_pins[] = { + {(1 * 16 + 13), GPIO_MUX_5, MK_PIN_MODE_MUX_OUTPUT_DOWN}, + {(1 * 16 + 12), GPIO_MUX_5, MK_PIN_MODE_MUX_OUTPUT_UP}, + {(1 * 16 + 15), GPIO_MUX_5, MK_PIN_MODE_MUX_OUTPUT_DOWN}, + {(1 * 16 + 14), GPIO_MUX_6, MK_PIN_MODE_MUX_OUTPUT_UP}, +}; +static uint8_t i2s_dma_tx_intr_stack[1024]; +static obj_handler_t i2s_dma_tx_intr_obj; +static uint8_t i2s_dma_rx_intr_stack[1024]; +static obj_handler_t i2s_dma_rx_intr_obj; +/** + * @brief audio codec i2s init + * @param freq: audio sampling freq + * @param bitw_format: bit width + * @retval error status + */ +void codec_i2s_init(audio_codec_type *param) +{ + int ret; + dma_init_type dma_init_struct; + i2s_init_type i2s_init_struct; + + crm_periph_clock_enable(I2S_CK_GPIO_CLK, TRUE); + crm_periph_clock_enable(I2S_WS_GPIO_CLK, TRUE); + crm_periph_clock_enable(I2S_SD_OUT_GPIO_CLK, TRUE); + crm_periph_clock_enable(I2S_SD_IN_GPIO_CLK, TRUE); + + crm_periph_clock_enable(I2S_DMAx_CLK, TRUE); + crm_periph_clock_enable(I2S_SPIx_CLK, TRUE); + + param->spk_tx_size = DMA_BUFFER_SIZE; + param->mic_rx_size = DMA_BUFFER_SIZE; + + for (int i = 0; i < ARRAY_SIZE(audio_pins); i++) + { + ret = ioctl(pin_fd, MK_PIN_SET_MODE, ((mk_pin_cfg_t){ + .mode = audio_pins[i].mode, + .pin = audio_pins[i].pin, + .cfg = audio_pins[i].mux_type, + }) + .cfg_raw); + if (ret < 0) + { + printf("audio pin set error.\n"); + while (1) + ; + } + } +#if 0 + gpio_init_type gpio_init_struct; + gpio_default_para_init(&gpio_init_struct); + + gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; + gpio_init_struct.gpio_pull = GPIO_PULL_UP; + gpio_init_struct.gpio_mode = GPIO_MODE_MUX; + gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; + + /* i2s2 ws pins */ + gpio_init_struct.gpio_pull = GPIO_PULL_UP; + gpio_init_struct.gpio_pins = I2S_WS_GPIO_PIN; + gpio_init(I2S_WS_GPIO_PORT, &gpio_init_struct); + gpio_pin_mux_config(I2S_WS_GPIO_PORT, I2S_WS_GPIO_PINS_SOURCE, I2S_WS_GPIO_MUX); + + /* i2s2 ck pins */ + gpio_init_struct.gpio_pull = GPIO_PULL_DOWN; + gpio_init_struct.gpio_pins = I2S_CK_GPIO_PIN; + gpio_init(I2S_CK_GPIO_PORT, &gpio_init_struct); + gpio_pin_mux_config(I2S_CK_GPIO_PORT, I2S_CK_GPIO_PINS_SOURCE, I2S_CK_GPIO_MUX); + + /* i2s2 SD pins */ + gpio_init_struct.gpio_pull = GPIO_PULL_DOWN; + gpio_init_struct.gpio_pins = I2S_SD_OUT_GPIO_PIN; + gpio_init(I2S_SD_OUT_GPIO_PORT, &gpio_init_struct); + gpio_pin_mux_config(I2S_SD_OUT_GPIO_PORT, I2S_SD_OUT_GPIO_PINS_SOURCE, I2S_SD_OUT_GPIO_MUX); + + /* i2s2_EXT pins slave rx */ + gpio_init_struct.gpio_pull = GPIO_PULL_UP; + gpio_init_struct.gpio_pins = I2S_SD_IN_GPIO_PIN; + gpio_init(I2S_SD_IN_GPIO_PORT, &gpio_init_struct); + gpio_pin_mux_config(I2S_SD_IN_GPIO_PORT, I2S_SD_IN_GPIO_PINS_SOURCE, I2S_SD_IN_GPIO_MUX); +#endif + /* dma config */ + dma_reset(I2S_DMA_TX_CHANNEL); + dma_reset(I2S_DMA_RX_CHANNEL); + + /* dma1 channel3: speaker i2s1 tx */ + dma_default_para_init(&dma_init_struct); + dma_init_struct.buffer_size = param->spk_tx_size; + dma_init_struct.direction = DMA_DIR_MEMORY_TO_PERIPHERAL; + dma_init_struct.memory_base_addr = (uint32_t)spk_dma_buffer; + dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_HALFWORD; + dma_init_struct.memory_inc_enable = TRUE; + dma_init_struct.peripheral_base_addr = (uint32_t)I2S_DT_ADDRESS; + dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_HALFWORD; + dma_init_struct.peripheral_inc_enable = FALSE; + dma_init_struct.priority = DMA_PRIORITY_HIGH; + dma_init_struct.loop_mode_enable = FALSE; + dma_init(I2S_DMA_TX_CHANNEL, &dma_init_struct); + dma_interrupt_enable(I2S_DMA_TX_CHANNEL, DMA_FDT_INT, TRUE); + // dma_interrupt_enable(I2S_DMA_TX_CHANNEL, DMA_HDT_INT, TRUE); + // nvic_irq_enable(I2S_DMA_TX_IRQn, 1, 0); + + ret = u_irq_request(I2S_DMA_TX_IRQn, (void *)(i2s_dma_tx_intr_stack + sizeof(i2s_dma_tx_intr_stack)), + NULL, &i2s_dma_tx_intr_obj, DMA1_Channel3_IRQHandler, u_irq_prio_create(1, 0)); + if (ret < 0) + { + printf("irq request error.\n"); + while (1) + ; + } + + /* dma1 channel4: microphone i2s2 rx */ + dma_default_para_init(&dma_init_struct); + dma_init_struct.buffer_size = param->mic_rx_size; + dma_init_struct.direction = DMA_DIR_PERIPHERAL_TO_MEMORY; + dma_init_struct.memory_base_addr = (uint32_t)mic_dma_buffer; + dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_HALFWORD; + dma_init_struct.memory_inc_enable = TRUE; + dma_init_struct.peripheral_base_addr = (uint32_t)(&(I2S_EXTx->dt)); + dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_HALFWORD; + dma_init_struct.peripheral_inc_enable = FALSE; + dma_init_struct.priority = DMA_PRIORITY_HIGH; + dma_init_struct.loop_mode_enable = FALSE; + dma_init(I2S_DMA_RX_CHANNEL, &dma_init_struct); + dma_interrupt_enable(I2S_DMA_RX_CHANNEL, DMA_FDT_INT, TRUE); + // dma_interrupt_enable(I2S_DMA_RX_CHANNEL, DMA_HDT_INT, TRUE); + // nvic_irq_enable(I2S_DMA_RX_IRQn, 2, 0); + + ret = u_irq_request(I2S_DMA_RX_IRQn, (void *)(i2s_dma_rx_intr_stack + sizeof(i2s_dma_rx_intr_stack)), + NULL, &i2s_dma_rx_intr_obj, DMA1_Channel4_IRQHandler, u_irq_prio_create(2, 0)); + if (ret < 0) + { + printf("irq request error.\n"); + while (1) + ; + } + /* i2s2 rx init */ + /* i2s2 Tx init */ + spi_i2s_reset(I2S_SPIx); + i2s_default_para_init(&i2s_init_struct); + i2s_init_struct.audio_protocol = I2S_AUDIO_PROTOCOL_PHILLIPS; + i2s_init_struct.data_channel_format = I2S_DATA_16BIT_CHANNEL_16BIT; + i2s_init_struct.mclk_output_enable = TRUE; + i2s_init_struct.audio_sampling_freq = I2S_AUDIO_FREQUENCY_48K; + i2s_init_struct.clock_polarity = I2S_CLOCK_POLARITY_LOW; + i2s_init_struct.operation_mode = I2S_MODE_SLAVE_TX; + i2s_init(I2S_SPIx, &i2s_init_struct); + /* i2s2EXT Rx init */ + i2s_init_struct.operation_mode = I2S_MODE_SLAVE_RX; + i2s_init(I2S_EXTx, &i2s_init_struct); + + spi_i2s_dma_transmitter_enable(I2S_SPIx, TRUE); + spi_i2s_dma_receiver_enable(I2S_EXTx, TRUE); + + dmamux_enable(I2S_DMAx, TRUE); + dmamux_init(I2S_DMA_TX_DMAMUX_CHANNEL, I2S_DMA_TX_DMAREQ); + dmamux_init(I2S_DMA_RX_DMAMUX_CHANNEL, I2S_DMA_RX_DMAREQ); + dma_channel_enable(I2S_DMA_TX_CHANNEL, TRUE); + dma_channel_enable(I2S_DMA_RX_CHANNEL, TRUE); + + i2s_enable(I2S_EXTx, TRUE); + i2s_enable(I2S_SPIx, TRUE); +} + +/** + * @brief power on + * @param none + * @retval none + */ +void audio_pa_power_on(void) +{ +#if 0 + pca9555_out_mode_config(AUDIO_PA_ON_PIN); + + pca9555_bits_reset(AUDIO_PA_ON_PIN); +#endif + ioctl(pca9555_fd, PCA9555_SET_OUTPUT_MODE, AUDIO_PA_ON_PIN); + ioctl(pca9555_fd, PCA9555_IO_RESET, AUDIO_PA_ON_PIN); +} + +/** + * @brief power off + * @param none + * @retval none + */ +void audio_pa_power_off(void) +{ +#if 0 + pca9555_out_mode_config(AUDIO_PA_ON_PIN); + + pca9555_bits_set(AUDIO_PA_ON_PIN); +#endif + ioctl(pca9555_fd, PCA9555_SET_OUTPUT_MODE, AUDIO_PA_ON_PIN); + ioctl(pca9555_fd, PCA9555_IO_SET, AUDIO_PA_ON_PIN); +} + +/** + * @brief audio codec init + * @param none + * @retval error status + */ +error_status audio_init(void) +{ + uint32_t reg_len = sizeof(reg_addr_data) / sizeof(uint16_t); + uint32_t i = 0; + uint8_t i2c_cmd[2]; + int ret; + +again: + pca9555_fd = open(DEV_PCA9555_PATH, O_RDWR, 0777); + if (pca9555_fd < 0) + { + u_sleep_ms(50); + goto again; + } +again2: + i2c_fd = open(DEV_I2C2_PATH, O_RDWR, 0777); + if (i2c_fd < 0) + { + u_sleep_ms(50); + goto again2; + } + + audio_pa_power_on(); + ret = lseek(i2c_fd, (0 << 16) | (WM8988_I2C_ADDR_CSB_LOW), SEEK_SET); + if (ret < 0) + { + printf("%s:%d ret:%d\n", __func__, __LINE__, ret); + return ret; + } + for (i = 0; i < reg_len; i++) + { + i2c_cmd[0] = (uint8_t)(reg_addr_data[i] >> 8); + + i2c_cmd[1] = (uint8_t)reg_addr_data[i] & 0xFF; + + ret = write(i2c_fd, i2c_cmd, 2); + if (ret != 2) + { + printf("error:%s:%d ret:%d\n", __func__, __LINE__, ret); + return -1; + } + } + + /* timer init */ + mclk_timer_init(); + + codec_i2s_init(&audio_codec); + + audio_codec_modify_freq(WM8988_REG_FREQ_22_05K); + + audio_dma_counter_set(WAV_DECODE_SIZE); + + // audio_wait_data_tx_end(); + + audio_spk_volume_set(220, 220); + +#if 1 + for (int i = 0; i < DMA_BUFFER_SIZE; i++) + { + music_output_buffer[i] = 0; + } +#endif + return SUCCESS; +} + +/** + * @brief set audio volume + * @param left_volume + * @param right_volume + * @retval error_status + */ +error_status audio_spk_volume_set(uint8_t left_volume, uint8_t right_volume) +{ + + uint16_t audio_left; + uint16_t audio_right; + int ret; + + uint8_t i2c_cmd[2]; + + audio_left = WM8988_R10_LEFT_DAC_VOLUME << 9 | 0x100 | left_volume; + audio_right = WM8988_R11_RIGHT_DAC_VOLUME << 9 | 0x100 | right_volume; + + i2c_cmd[0] = (uint8_t)(audio_left >> 8); + i2c_cmd[1] = (uint8_t)audio_left & 0xFF; + + ret = write(i2c_fd, i2c_cmd, 2); + if (ret != 2) + { + printf("error:%s:%d ret:%d\n", __func__, __LINE__, ret); + return ERROR; + } + + i2c_cmd[0] = (uint8_t)(audio_right >> 8); + i2c_cmd[1] = (uint8_t)audio_right & 0xFF; + + ret = write(i2c_fd, i2c_cmd, 2); + if (ret != 2) + { + printf("error:%s:%d ret:%d\n", __func__, __LINE__, ret); + return ERROR; + } + return SUCCESS; +} + +/** + * @brief audio codec modify freq + * @param freq: freq (wm8988 microphone and speaker must as same freq) + WM8988_REG_FREQ_8_K + WM8988_REG_FREQ_8_0214_K + WM8988_REG_FREQ_11_025_K + WM8988_REG_FREQ_12_K + WM8988_REG_FREQ_16K + WM8988_REG_FREQ_22_05K + WM8988_REG_FREQ_24K + WM8988_REG_FREQ_32_K + WM8988_REG_FREQ_44_1_K + WM8988_REG_FREQ_48_K + WM8988_REG_FREQ_88_235K + WM8988_REG_FREQ_96_K + * @retval none + */ +void audio_codec_modify_freq(uint16_t freq) +{ + int ret; + uint8_t i2c_cmd[2]; + + i2c_cmd[0] = (uint8_t)(freq >> 8); + + i2c_cmd[1] = (uint8_t)freq & 0xFF; + + ret = write(i2c_fd, i2c_cmd, 2); + if (ret != 2) + { + printf("error:%s:%d ret:%d\n", __func__, __LINE__, ret); + while (1) + ; + } +} + +/** + * @brief audio codec modify freq + * @param freq: freq (wm8988 microphone and speaker must as same freq) + WM8988_REG_FREQ_8_K + WM8988_REG_FREQ_8_0214_K + WM8988_REG_FREQ_11_025_K + WM8988_REG_FREQ_12_K + WM8988_REG_FREQ_16K + WM8988_REG_FREQ_22_05K + WM8988_REG_FREQ_24K + WM8988_REG_FREQ_32_K + WM8988_REG_FREQ_44_1_K + WM8988_REG_FREQ_48_K + WM8988_REG_FREQ_88_235K + WM8988_REG_FREQ_96_K + * @retval none + */ +void audio_dma_counter_set(uint16_t counter) +{ + audio_codec.spk_tx_size = counter * 2; +} + +/** + * @brief wait data transmit end + * @param none + * @retval none + */ +void audio_wait_data_tx_end(void) +{ + while (i2s_dma_tx_end == 0) + ; + + i2s_dma_tx_end = 0; +} + +/** + * @brief audio codec modify freq + * @param counter: freq (wm8988 microphone and speaker must as same freq) + * @retval none + */ +void modify_dma_tx_counter(uint16_t counter) +{ + static uint16_t counter_last = 0xFFFF; + + /* the frequency value changes */ + if (counter_last != counter) + { + dma_channel_enable(I2S_DMA_TX_CHANNEL, FALSE); + + dma_data_number_set(I2S_DMA_TX_CHANNEL, counter); + + dma_channel_enable(I2S_DMA_TX_CHANNEL, TRUE); + + audio_codec.spk_tx_size = counter; + + counter_last = counter; + } +} + +/** + * @brief this function handles dma1 channel3 interrupt. + * @param none + * @retval none + */ +void DMA1_Channel3_IRQHandler(void) +{ + while (1) + { + msg_tag_t tag = uirq_wait(i2s_dma_tx_intr_obj, 0); + if (msg_tag_get_val(tag) >= 0) + { + if (dma_interrupt_flag_get(I2S_DMA_TX_HDT_FLAG) == SET) + { + dma_flag_clear(I2S_DMA_TX_HDT_FLAG); + } + else if (dma_interrupt_flag_get(I2S_DMA_TX_FDT_FLAG) == SET) + { + // memcpy(spk_dma_buffer, (uint16_t *)music_output_buffer, DMA_BUFFER_SIZE); + // modify_dma_tx_counter(audio_codec.spk_tx_size); + i2s_dma_tx_end = 1; + dma_flag_clear(I2S_DMA_TX_FDT_FLAG); + } + uirq_ack(i2s_dma_tx_intr_obj, I2S_DMA_TX_IRQn); + } + } +} + +/** + * @brief this function handles dma1 channel4 interrupt. + * @param none + * @retval none + */ +void DMA1_Channel4_IRQHandler(void) +{ + while (1) + { + msg_tag_t tag = uirq_wait(i2s_dma_rx_intr_obj, 0); + if (msg_tag_get_val(tag) >= 0) + { + if (dma_interrupt_flag_get(I2S_DMA_RX_HDT_FLAG) == SET) + { + dma_flag_clear(I2S_DMA_RX_HDT_FLAG); + } + else if (dma_interrupt_flag_get(I2S_DMA_RX_FDT_FLAG) == SET) + { + dma_flag_clear(I2S_DMA_RX_FDT_FLAG); + } + uirq_ack(i2s_dma_rx_intr_obj, I2S_DMA_RX_IRQn); + } + } +} diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.h b/mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.h new file mode 100644 index 000000000..bc949af55 --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/at_surf_f437_board_audio.h @@ -0,0 +1,200 @@ +/** + ************************************************************************** + * @file at_surf_f437_board_audio.c + * @brief header file for at-start board. set of firmware functions to + * manage leds and push-button. initialize delay function. + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +#ifndef __AT32_SURF_F437_BOARD_AUDIO_H +#define __AT32_SURF_F437_BOARD_AUDIO_H + +#ifdef __cplusplus +extern "C" { +#endif +#include "at32f435_437_conf.h" +#include "u_types.h" +/** + * @brief wm8988 register + */ +#define WM8988_R0_LEFT_INPUT_VOLUME 0x00 +#define WM8988_R1_RIGHT_INPUT_VOLUME 0x01 +#define WM8988_R2_LOUT1_VOLUME 0x02 +#define WM8988_R3_ROUT1_VOLUME 0x03 +#define WM8988_R4_RESERVED 0x04 +#define WM8988_R5_ADC_DAC_CONTROL 0x05 +#define WM8988_R6_RESERVED 0x06 +#define WM8988_R7_AUDIO_INTERFACE 0x07 +#define WM8988_R8_SAMPLE_RATE 0x08 +#define WM8988_R9_RESERVED 0x09 +#define WM8988_R10_LEFT_DAC_VOLUME 0x0A +#define WM8988_R11_RIGHT_DAC_VOLUME 0x0B +#define WM8988_R12_BASS_CONTROL 0x0C +#define WM8988_R13_TREBLE_CONTROL 0x0D +#define WM8988_R14_ +#define WM8988_R15_RESET 0x0F +#define WM8988_R16_3D_CONTROL 0x10 +#define WM8988_R17_ALC1 0x11 +#define WM8988_R18_ALC2 0x12 +#define WM8988_R19_ALC3 0x13 +#define WM8988_R20_NOISE_GATE 0x14 +#define WM8988_R21_LEFT_ADC_VOLUME 0x15 +#define WM8988_R22_RIGHT_ADC_VOLUME 0x16 +#define WM8988_R23_ADDITIONAL_1_CONTROL 0x17 +#define WM8988_R24_ADDITIONAL_2_CONTROL 0x18 +#define WM8988_R25_PWR_1_MGMT 0x19 +#define WM8988_R26_PWR_2_MGMT 0x1A +#define WM8988_R27_ADDITIONAL_3_CONTROL 0x1B + +#define WM8988_R31_ADC_INPUT_MODE 0x1F +#define WM8988_R32_ADC_L_SIGNAL_PATH 0x20 +#define WM8988_R33_ADC_R_SIGNAL_PATH 0x21 +#define WM8988_R34_LEFT_OUT_MIX_1 0x22 +#define WM8988_R35_LEFT_OUT_MIX_2 0x23 +#define WM8988_R36_RIGHT_OUT_MIX_1 0x24 +#define WM8988_R37_RIGHT_OUT_MIX_2 0x25 +#define WM8988_R38_RESERVED +#define WM8988_R39_RESERVED +#define WM8988_R40_LOUT2_VOLUME 0x28 +#define WM8988_R41_ROUT2_VOLUME 0x29 +#define WM8988_R42_RESERVED +#define WM8988_R43_LOW_POWER_PALYBACK 0x43 + +#define WM8988_I2C_ADDR_CSB_LOW 0x34 +#define WM8988_I2C_ADDR_CSB_HIGH 0x36 + +/** + * @brief wm8988 freq + */ +#define WM8988_REG_FREQ_8_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x000C) /* 8 kHz */ +#define WM8988_REG_FREQ_8_0214_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x002E) /* 8.0214 kHz */ +#define WM8988_REG_FREQ_11_025_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0032) /* 11.0259 kHz */ +#define WM8988_REG_FREQ_12_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0010) /* 12 kHz */ +#define WM8988_REG_FREQ_16K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0014) /* 16kHz */ +#define WM8988_REG_FREQ_22_05K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0036) /* 22.0588kHz */ +#define WM8988_REG_FREQ_24K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0038) /* 24kHz */ +#define WM8988_REG_FREQ_32_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0018) /* 32 kHz */ +#define WM8988_REG_FREQ_44_1_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0022) /* 44.118 kHz */ +#define WM8988_REG_FREQ_48_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x0000) /* 48 kHz */ +#define WM8988_REG_FREQ_88_235K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x003E) /* 88.235kHz */ +#define WM8988_REG_FREQ_96_K ((WM8988_R8_SAMPLE_RATE << 9) | 0x0081 | 0x001C) /* 96 kHz */ + +/** + * @brief wm8988 bit width + */ +#define WM8988_REG_BITW16 ((WM8988_R7_AUDIO_INTERFACE << 9) | 0x0042) + +/** @defgroup USB_device_audio_codec_exported_functions + * @{ + */ + +/** + * @brief wm8988 buffer size + */ +#define DMA_BUFFER_SIZE 367 + + +#define AUDIO_FREQ_16K 16000 +#define AUDIO_FREQ_48K 48000 +#define AUDIO_BITW_16 16 + +#define AUDIO_MIC_CHANEL_NUM 2 +#define AUDIO_MIC_DEFAULT_BITW AUDIO_BITW_16 + +#define AUDIO_SPK_CHANEL_NUM 2 +#define AUDIO_SPK_DEFAULT_BITW AUDIO_BITW_16 + +/** + * @brief wm8988 pin definition + */ +#define I2S_DMAx_CLK CRM_DMA1_PERIPH_CLOCK +#define I2S_SPIx_CLK CRM_SPI2_PERIPH_CLOCK + +#define I2S_SPIx SPI2 +#define I2S_EXTx I2S2EXT +#define I2S_DMAx DMA1 +#define I2S_DT_ADDRESS (&(SPI2->dt)) + +#define I2S_CK_GPIO_CLK CRM_GPIOB_PERIPH_CLOCK +#define I2S_CK_GPIO_PIN GPIO_PINS_13 +#define I2S_CK_GPIO_PINS_SOURCE GPIO_PINS_SOURCE13 +#define I2S_CK_GPIO_PORT GPIOB +#define I2S_CK_GPIO_MUX GPIO_MUX_5 + +#define I2S_WS_GPIO_CLK CRM_GPIOB_PERIPH_CLOCK +#define I2S_WS_GPIO_PIN GPIO_PINS_12 +#define I2S_WS_GPIO_PINS_SOURCE GPIO_PINS_SOURCE12 +#define I2S_WS_GPIO_PORT GPIOB +#define I2S_WS_GPIO_MUX GPIO_MUX_5 + +#define I2S_SD_OUT_GPIO_CLK CRM_GPIOB_PERIPH_CLOCK +#define I2S_SD_OUT_GPIO_PIN GPIO_PINS_15 +#define I2S_SD_OUT_GPIO_PINS_SOURCE GPIO_PINS_SOURCE15 +#define I2S_SD_OUT_GPIO_PORT GPIOB +#define I2S_SD_OUT_GPIO_MUX GPIO_MUX_5 + +#define I2S_SD_IN_GPIO_CLK CRM_GPIOB_PERIPH_CLOCK +#define I2S_SD_IN_GPIO_PIN GPIO_PINS_14 +#define I2S_SD_IN_GPIO_PINS_SOURCE GPIO_PINS_SOURCE14 +#define I2S_SD_IN_GPIO_PORT GPIOB +#define I2S_SD_IN_GPIO_MUX GPIO_MUX_6 + +#define AUDIO_PA_ON_PIN PCA_IO0_PINS_2 + +#define I2S_DMA_TX_CHANNEL DMA1_CHANNEL3 +#define I2S_DMA_TX_DMAMUX_CHANNEL DMA1MUX_CHANNEL3 +#define I2S_DMA_TX_DMAREQ DMAMUX_DMAREQ_ID_SPI2_TX +#define I2S_DMA_TX_IRQn DMA1_Channel3_IRQn +// #define I2S_DMA_TX_IRQHandler DMA1_Channel3_IRQHandler +#define I2S_DMA_TX_HDT_FLAG DMA1_HDT3_FLAG +#define I2S_DMA_TX_FDT_FLAG DMA1_FDT3_FLAG + +#define I2S_DMA_RX_CHANNEL DMA1_CHANNEL4 +#define I2S_DMA_RX_DMAMUX_CHANNEL DMA1MUX_CHANNEL4 +#define I2S_DMA_RX_DMAREQ DMAMUX_DMAREQ_ID_I2S2_EXT_RX +#define I2S_DMA_RX_IRQn DMA1_Channel4_IRQn +// #define I2S_DMA_RX_IRQHandler DMA1_Channel4_IRQHandler +#define I2S_DMA_RX_HDT_FLAG DMA1_HDT4_FLAG +#define I2S_DMA_RX_FDT_FLAG DMA1_FDT4_FLAG + +/** + * @brief audio codec interface + */ +typedef struct +{ + uint32_t spk_tx_size; + uint32_t mic_rx_size; +}audio_codec_type; + +/** + * @brief audio codec interface + */ +error_status audio_init(void); +error_status audio_spk_volume_set(uint8_t left_volume, uint8_t right_volume); +void audio_codec_modify_freq(uint16_t freq); +void audio_dma_counter_set(uint16_t counter); +extern audio_codec_type audio_codec; +void audio_wait_data_tx_end(void); +void audio_output_cp(void *src, int len); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c new file mode 100644 index 000000000..28c616857 --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c @@ -0,0 +1,17 @@ + +#define HEAP_SIZE (2048) +#define STACK_SIZE (1024 * 2) + +#if defined(__CC_ARM) +#define HEAP_ATTR SECTION("HEAP") __attribute__((zero_init)) +#define STACK_ATTR SECTION("STACK") __attribute__((zero_init)) +#elif defined(__GNUC__) +#define HEAP_ATTR __attribute__((__section__(".bss.heap"))) +#define STACK_ATTR __attribute__((__section__(".bss.stack"))) +#elif defined(__IAR_SYSTEMS_ICC__) +#define HEAP_ATTR +#define STACK_ATTR +#endif + +__attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; +__attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/main.c b/mkrtos_user/user/drv/ATSURFF437/snd/main.c new file mode 100644 index 000000000..84a81c42c --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/main.c @@ -0,0 +1,81 @@ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ns_cli.h" +#include "rpc_prot.h" +#include "u_hd_man.h" +#include "u_share_mem.h" +#include +#include +#include +#include + +#include "mk_snd_drv_impl.h" +static snd_drv_t snd_drv; //!< 网络驱动的协议 + +int snd_drv_write(obj_handler_t obj, int len) +{ + int ret = -1; + addr_t addr = 0; + umword_t size = 0; + msg_tag_t tag = share_mem_map(obj, vma_addr_create(VPAGE_PROT_RWX, 0, 0), &addr, &size); + + if (msg_tag_get_val(tag) < 0) + { + handler_free_umap(obj); + printf("snd write error.\n"); + return msg_tag_get_val(tag); + } + + audio_output_cp((uint8_t *)addr, len); + // mk_printf("snd write len:%d.\n", MIN(size, len)); + handler_free_umap(obj); + return len; +} +int snd_drv_read(obj_handler_t obj, int len) +{ + int ret = -1; + addr_t addr = 0; + umword_t size = 0; + msg_tag_t tag = share_mem_map(obj, vma_addr_create(VPAGE_PROT_RWX, 0, 0), &addr, &size); + uint32_t _err; + + // ret = emac_read_packet((uint8_t *)addr, size); + handler_free_umap(obj); + return ret; +} +int snd_drv_map(obj_handler_t *hd) +{ + // *hd = emac_get_sema(); + return -1; +} +int main(int argc, char *argv[]) +{ + obj_handler_t hd; + int ret; + task_set_obj_name(TASK_THIS, TASK_THIS, "tk_snd"); + task_set_obj_name(TASK_THIS, THREAD_MAIN, "th_snd"); + printf("%s init..\n", argv[0]); + mk_drv_init(); + mk_dev_init(); + drv_snd_init(); + dtb_parse_init(); + + snd_drv_init(&snd_drv); + ret = rpc_meta_init(THREAD_MAIN, &hd); + assert(ret >= 0); + ns_register("/snd", hd, FILE_NODE); + meta_reg_svr_obj(&snd_drv.svr, SND_DRV_PROT); + while (1) + { + rpc_loop(); + } +} diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.c b/mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.c new file mode 100644 index 000000000..1fd623419 --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.c @@ -0,0 +1,92 @@ + + +#include +#include +#include +#include +#include +#include +#include "mk_drv.h" +#include "mk_snd_drv.h" +#include "mk_dtb_parse.h" +#include +#include +#include +#include +#include +#include +#include "mk_snd_drv_impl.h" +#include "at_surf_f437_board_audio.h" + +typedef struct snd_priv_data +{ +} snd_priv_data_t; + +static snd_priv_data_t snd_priv_data; + +static int snd_bus_configure(mk_snd_t *drv) +{ + assert(drv); + snd_priv_data_t *priv_data = drv->priv_data; + + return 0; +} +static int snd_bus_read(mk_snd_t *drv, uint8_t *data, int len) +{ + + return -1; +} +static int snd_bus_write(mk_snd_t *drv, uint8_t *data, int len) +{ + + return -1; +} + +static mk_snd_ops_t snd_ops = { + .snd_configure = snd_bus_configure, + .snd_read = snd_bus_read, + .snd_write = snd_bus_write, +}; +static mk_snd_dev_t snd_dev = { + .ops = &snd_ops, + .snd.priv_data = &snd_priv_data, +}; + +static int snd_probe(mk_dev_t *dev) +{ + int ret; + + /* ioremap */ + ret = dev_regs_map(dev, dev->dtb); + if (ret < 0) + { + printf("snd dev regs map failed.\n"); + return -ENOMEM; + } + if (audio_init() != SUCCESS) + { + printf("audio init failed.\n"); + return -EIO; + } + printf("snd init success.\r\n"); + /* 注册snd设备 */ + // mk_snd_register(dev, &snd_dev); + return 0; +} + +static mk_drv_compatible_t drv_compatilbe[] = + { + {"at32f43x,snd"}, + {NULL}, +}; + +static mk_drv_t snd_drv = + { + .compatilbe = drv_compatilbe, + .probe = snd_probe, + .data = NULL, +}; +void drv_snd_init(void) +{ + mk_drv_register(&snd_drv); +} diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.h b/mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.h new file mode 100644 index 000000000..5b05d086c --- /dev/null +++ b/mkrtos_user/user/drv/ATSURFF437/snd/mk_snd_drv_impl.h @@ -0,0 +1,5 @@ +#pragma once + +#include "at_surf_f437_board_audio.h" + +void drv_snd_init(void); diff --git a/mkrtos_user/user/drv/CMakeLists.txt b/mkrtos_user/user/drv/CMakeLists.txt index 64c8e8a75..e7d484496 100644 --- a/mkrtos_user/user/drv/CMakeLists.txt +++ b/mkrtos_user/user/drv/CMakeLists.txt @@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.13) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMKRTOS_DRV " ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMKRTOS_DRV ") set(CMAKE_CXX_FLAGS "${CMAKE_ASM_FLAGS} -DMKRTOS_DRV ") -# if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_BOARD_NAME}) -# add_subdirectory(${CONFIG_BOARD_NAME}) -# endif() -add_subdirectory(ATSURFF437) +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_BOARD_NAME}) + add_subdirectory(${CONFIG_BOARD_NAME}) +endif() +# add_subdirectory(ATSURFF437) add_subdirectory(lib) diff --git a/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.c b/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.c index 6a9402804..05a87aee2 100644 --- a/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.c +++ b/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.c @@ -80,7 +80,7 @@ static int mk_eth_drv_ioctl(mk_dev_t *pin, int cmd, umword_t args) return msg_tag_get_val(tag); } ret = mk_copy_mem_to_task(src_pid, (void *)args, - cur_pid, &info, sizeof(mk_ioctl_set_info_t)); + cur_pid, &info, sizeof(mk_eth_ioctl_set_info_t)); if (ret < 0) { return ret; diff --git a/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.h b/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.h index 143942141..93738f13a 100644 --- a/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.h +++ b/mkrtos_user/user/drv/lib/mk_eth/mk_eth_drv.h @@ -8,10 +8,10 @@ enum mk_eth_ioctl_op ETH_SET_MAC_ADDR, }; -typedef struct mk_ioctl_set_info +typedef struct mk_eth_ioctl_set_info { uint8_t mac_addr[6]; -} mk_ioctl_set_info_t; +} mk_eth_ioctl_set_info_t; /** * @brief eth设备数据 * @@ -26,7 +26,7 @@ typedef struct mk_eth */ typedef struct mk_eth_ops { - int (*eth_configure)(mk_eth_t *drv, enum mk_eth_ioctl_op op, mk_ioctl_set_info_t *info); + int (*eth_configure)(mk_eth_t *drv, enum mk_eth_ioctl_op op, mk_eth_ioctl_set_info_t *info); int (*eth_read)(mk_eth_t *drv, uint8_t *data, int len); int (*eth_write)(mk_eth_t *drv, uint8_t *dat, int len); } mk_eth_ops_t; diff --git a/mkrtos_user/user/drv/lib/mk_pin/mk_pin_drv.h b/mkrtos_user/user/drv/lib/mk_pin/mk_pin_drv.h index 6f31300a0..085f0a383 100644 --- a/mkrtos_user/user/drv/lib/mk_pin/mk_pin_drv.h +++ b/mkrtos_user/user/drv/lib/mk_pin/mk_pin_drv.h @@ -56,6 +56,8 @@ enum mk_pin_mode_cfg MK_PIN_MODE_MUX_OUTPUT, MK_PIN_MODE_MUX_OUTPUT_OD, + MK_PIN_MODE_MUX_OUTPUT_UP, + MK_PIN_MODE_MUX_OUTPUT_DOWN, MK_PIN_MODE_IRQ_RISING, MK_PIN_MODE_IRQ_FALLING, diff --git a/mkrtos_user/user/drv/lib/mk_snd/CMakeLists.txt b/mkrtos_user/user/drv/lib/mk_snd/CMakeLists.txt new file mode 100644 index 000000000..b8f71bb8f --- /dev/null +++ b/mkrtos_user/user/drv/lib/mk_snd/CMakeLists.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 3.13) + + +file(GLOB_RECURSE deps *.c *.S) +add_library( + mk_snd + STATIC + ${deps} +) +target_link_libraries( + mk_snd + PRIVATE + fdt + sys + sys_util + sys_svr + mk_drv +) +add_dependencies( + mk_snd + fdt + sys + sys_util + sys_svr + mk_drv +) +target_include_directories( + mk_snd + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/ + ${CMAKE_CURRENT_SOURCE_DIR}/../mk_drv + ${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_char + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc/${ARCH_NAME} + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/util/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libfdt/lib/contrib +) diff --git a/mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.c b/mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.c new file mode 100644 index 000000000..64f877367 --- /dev/null +++ b/mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.c @@ -0,0 +1,120 @@ + +#include "mk_snd_drv.h" +#include "u_types.h" +#include +#include +#include +#include +#include +#include "u_prot.h" +#include "u_task.h" +/** + * @brief 写pin操作 + * + * @param pin pin设备 + * @param buf 写的buf + * @param size 写入大小 + * @return int 写入的个数 + */ +static int mk_snd_drv_write(mk_dev_t *pin, void *buf, size_t size, off_t *offset) +{ + assert(buf); + assert(pin); + mk_snd_dev_t *pin_dev = pin->priv_data; + mk_snd_ops_t *ops = pin_dev->ops; + assert(ops); + + int ret = ops->snd_write(&pin_dev->snd, buf, size); + + return ret; +} +/** + * @brief 读取pin数据 + * + * @param pin + * @param buf + * @param size + * @return int + */ +static int mk_snd_drv_read(mk_dev_t *pin, void *buf, size_t size, off_t *offset) +{ + assert(buf); + assert(pin); + mk_snd_dev_t *pin_dev = pin->priv_data; + mk_snd_ops_t *ops = pin_dev->ops; + assert(ops); + + int ret = ops->snd_read(&pin_dev->snd, buf, size); + + return ret; +} + +/** + * @brief 控制pin状态 + * + * @param pin + * @param cmd + * @param args + * @return int + */ +static int mk_snd_drv_ioctl(mk_dev_t *pin, int cmd, umword_t args) +{ + assert(pin); + pid_t src_pid = thread_get_src_pid(); + pid_t cur_pid; + mk_snd_dev_t *snd_dev = pin->priv_data; + mk_snd_ops_t *ops = snd_dev->ops; + assert(ops); + int ret = 0; + msg_tag_t tag; + + switch (cmd) + { + case ETH_SET_MAC_ADDR: + { + mk_ioctl_set_info_t info; + + tag = task_get_pid(TASK_THIS, (umword_t *)(&cur_pid)); + if (msg_tag_get_val(tag) < 0) + { + return msg_tag_get_val(tag); + } + ret = mk_copy_mem_to_task(src_pid, (void *)args, + cur_pid, &info, sizeof(mk_snd_ioctl_set_info_t)); + if (ret < 0) + { + return ret; + } + if (ops->snd_configure) { + ops->snd_configure(snd_dev, cmd, &info); + } + } + break; + default: + break; + } + return ret; +} +// static mk_file_ops_t file_ops = { +// .open = NULL, +// .write = mk_snd_drv_write, +// .read = mk_snd_drv_read, +// .ioctl = mk_snd_drv_ioctl, +// .release = NULL, +// }; + +int mk_snd_register(mk_dev_t *dev, mk_snd_dev_t *pin_drv) +{ + int ret = 0; + assert(dev); + assert(pin_drv); + + // ret = mk_char_dev_register(dev, &file_ops); + // if (ret < 0) + // { + // return ret; + // } + mk_dev_set_priv_data(dev, pin_drv); + + return ret; +} \ No newline at end of file diff --git a/mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.h b/mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.h new file mode 100644 index 000000000..fb2881647 --- /dev/null +++ b/mkrtos_user/user/drv/lib/mk_snd/mk_snd_drv.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include + + +/** + * @brief snd设备数据 + * + */ +typedef struct mk_snd +{ + void *priv_data; +} mk_snd_t; +/** + * @brief snd设备操作对象 + * + */ +typedef struct mk_snd_ops +{ + int (*snd_configure)(mk_snd_t *drv); + int (*snd_read)(mk_snd_t *drv, uint8_t *data, int len); + int (*snd_write)(mk_snd_t *drv, uint8_t *dat, int len); +} mk_snd_ops_t; + +/** + * @brief snd设备 + * + */ +typedef struct mk_snd_dev +{ + mk_snd_t snd; + mk_snd_ops_t *ops; +} mk_snd_dev_t; + +int mk_snd_register(mk_dev_t *dev, mk_snd_dev_t *pin_drv);