| /* |
| * Copyright 2023 NXP |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <stdio.h> |
| #include <zephyr/linker/section_tags.h> |
| #include "memc_nxp_flexram.h" |
| #include <zephyr/kernel.h> |
| #include <zephyr/console/console.h> |
| #include <zephyr/cache.h> |
| |
| K_SEM_DEFINE(dtcm_magic, 0, 1); |
| |
| __dtcm_bss_section uint8_t var; |
| int cnt; |
| |
| void flexram_magic_addr_isr_cb(enum memc_flexram_interrupt_cause cause, |
| void *data) |
| { |
| ARG_UNUSED(data); |
| |
| if (cause == flexram_dtcm_magic_addr) { |
| printf("Magic DTCM address accessed %d times\n", ++cnt); |
| k_sem_give(&dtcm_magic); |
| } |
| } |
| |
| |
| int main(void) |
| { |
| memc_flexram_register_callback(flexram_magic_addr_isr_cb, NULL); |
| |
| console_init(); |
| |
| printf("%s is opening spellbook...\n", CONFIG_BOARD); |
| printf("Cast some characters:\n"); |
| |
| uint32_t dtcm_addr = (uint32_t)&var; |
| |
| memc_flexram_set_dtcm_magic_addr(dtcm_addr); |
| |
| uint8_t tmp; |
| |
| while (1) { |
| printf("\n"); |
| tmp = console_getchar(); |
| printf("Writing %c to magic addr...\n", tmp); |
| var = tmp; |
| k_sem_take(&dtcm_magic, K_FOREVER); |
| printf("Reading from magic addr...\n"); |
| printf("Magic variable got: %c\n", var); |
| k_sem_take(&dtcm_magic, K_FOREVER); |
| } |
| |
| return 0; |
| } |