mdebug

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit d5740e03eb1a5603caa941012b1e3b80fb3f13e0
parent 1ed3027cb83464ccae6c05cc4e8343dfc458e7c2
Author: Brian Swetland <swetland@playground.global>
Date:   Thu, 14 Jan 2016 19:15:00 -0800

initial cc13xx agent for ti cc13xx and cc26xx devices

Diffstat:
MMakefile | 1+
Aagents/cc13xx-romapi.h | 35+++++++++++++++++++++++++++++++++++
Aagents/cc13xx.c | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 106 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -43,6 +43,7 @@ $(call agent, lpclink2, 0x10080400) $(call agent, stm32f4xx, 0x20000400) $(call agent, lpc13xx, 0x10000400) $(call agent, lpc15xx, 0x02000400) +$(call agent, cc13xx, 0x20000400) # tool to pack the agents into a source file SRCS := tools/mkbuiltins.c diff --git a/agents/cc13xx-romapi.h b/agents/cc13xx-romapi.h @@ -0,0 +1,35 @@ + +#define ROM_API_TABLE ((u32*) 0x10000180) +#define ROM_API_FLASH_TABLE ((u32*) (ROM_API_TABLE[10])) + +#define ROM_FlashPowerModeGet \ + ((u32 (*)(void)) \ + ROM_API_FLASH_TABLE[1]) + +#define ROM_FlashProtectionSet \ + ((void (*)(u32 ui32SectorAddress, u32 ui32ProtectMode)) \ + ROM_API_FLASH_TABLE[2]) + +#define ROM_FlashProtectionGet \ + ((u32 (*)(u32 ui32SectorAddress)) \ + ROM_API_FLASH_TABLE[3]) + +#define ROM_FlashProtectionSave \ + ((u32 (*)(u32 ui32SectorAddress)) \ + ROM_API_FLASH_TABLE[4]) + +#define ROM_FlashSectorErase \ + ((u32 (*)(u32 ui32SectorAddress)) \ + ROM_API_FLASH_TABLE[5]) + +#define ROM_FlashProgram \ + ((u32 (*)(const void *pui8DataBuffer, u32 ui32Address, u32 ui32Count)) \ + ROM_API_FLASH_TABLE[6]) + +#define ROM_FlashEfuseReadRow \ + ((u32 (*)(u32* pui32EfuseData, u32 ui32RowAddress)) \ + ROM_API_FLASH_TABLE[8]) + +#define ROM_FlashDisableSectorsForWrite \ + ((void (*)(void)) \ + ROM_API_FLASH_TABLE[9]) diff --git a/agents/cc13xx.c b/agents/cc13xx.c @@ -0,0 +1,70 @@ +// agent-lpc15xx/main.c +// +// Copyright 2016 Brian Swetland <swetland@frotz.net> +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include <agent/flash.h> +#include "cc13xx-romapi.h" + +int flash_agent_setup(flash_agent *agent) { + return ERR_NONE; +} + +int flash_agent_erase(u32 flash_addr, u32 length) { + if (flash_addr & 0xFFF) { + return ERR_ALIGNMENT; + } + while (length > 0) { + if (ROM_FlashSectorErase(flash_addr)) { + return ERR_FAIL; + } + if (length > 4096) { + length -= 4096; + flash_addr += 4096; + } else { + break; + } + } + return 0; +} + +int flash_agent_write(u32 flash_addr, const void *data, u32 length) { + if (flash_addr & 0xFFF) { + return ERR_ALIGNMENT; + } + if (ROM_FlashProgram(data, flash_addr, length)) { + return ERR_FAIL; + } + return 0; +} + + +int flash_agent_ioctl(u32 op, void *ptr, u32 arg0, u32 arg1) { + return ERR_INVALID; +} + +const flash_agent __attribute((section(".vectors"))) FlashAgent = { + .magic = AGENT_MAGIC, + .version = AGENT_VERSION, + .flags = 0, + .load_addr = 0x20000400, + .data_addr = 0x20001000, + .data_size = 0x1000, + .flash_addr = 0x00000000, + .flash_size = 0x00020000, + .setup = flash_agent_setup, + .erase = flash_agent_erase, + .write = flash_agent_write, + .ioctl = flash_agent_ioctl, +};