Demo using extra 16K SRAM banks on LPC1768 for C object storage

Dependencies:   mbed

On-chip LPC1768 SRAM includes:

32 kB of SRAM on the CPU with local code/data bus for high-performance CPU access. Used by compiler for all variables and objects by default.

Two 16 kB SRAM blocks with separate access paths for higher throughput. These SRAM blocks may be used for Ethernet, USB, and DMA memory, as well as for general purpose CPU instruction and data storage. Using any of the SRAM in these banks requires a compiler directive in the object's declaration in the C++ source code.

int buffer_SRAM[3000]; //regular SRAM use by compiler
int buffer_SRAM_Bank0[4000] __attribute__((section("AHBSRAM0"))); //put in extra 16K bank
int buffer_SRAM_Bank1[4000] __attribute__((section("AHBSRAM1"))); //put in other extra 16K bank

Some Ethernet code uses one of the banks to buffer network packets.

Committer:
4180_1
Date:
Fri Sep 23 14:09:54 2022 +0000
Revision:
0:18d7c2b051c8
ver 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:18d7c2b051c8 1 //Demo using additional SRAM Banks on LPC1768
4180_1 0:18d7c2b051c8 2 #include "mbed.h"
4180_1 0:18d7c2b051c8 3 Serial pc(USBTX,USBRX);
4180_1 0:18d7c2b051c8 4 DigitalOut myled(LED1);
4180_1 0:18d7c2b051c8 5 int i=0;
4180_1 0:18d7c2b051c8 6 int buffer_SRAM[3000]; //regular SRAM use by compiler
4180_1 0:18d7c2b051c8 7 int buffer_SRAM_Bank0[4000] __attribute__((section("AHBSRAM0"))); //put in extra 16K bank
4180_1 0:18d7c2b051c8 8 int buffer_SRAM_Bank1[4000] __attribute__((section("AHBSRAM1"))); //put in other extra 16K bank
4180_1 0:18d7c2b051c8 9 int main()
4180_1 0:18d7c2b051c8 10 {
4180_1 0:18d7c2b051c8 11 pc.printf("Hello Extra SRAM\n\r");
4180_1 0:18d7c2b051c8 12 pc.printf("size of int %d bytes\n\r",sizeof(buffer_SRAM[0]));
4180_1 0:18d7c2b051c8 13 pc.printf("address of buffer_SRAM %x\n\r",buffer_SRAM);
4180_1 0:18d7c2b051c8 14 pc.printf("address of buffer_SRAM_Bank0 %x\n\r",buffer_SRAM_Bank0);
4180_1 0:18d7c2b051c8 15 pc.printf("address of buffer_SRAM_Bank1 %x\n\r",buffer_SRAM_Bank1);
4180_1 0:18d7c2b051c8 16 wait(5);
4180_1 0:18d7c2b051c8 17 while(1) {
4180_1 0:18d7c2b051c8 18 myled = 1;
4180_1 0:18d7c2b051c8 19 for(i=0; i<4000; i++) {
4180_1 0:18d7c2b051c8 20 buffer_SRAM_Bank0[i]=i;
4180_1 0:18d7c2b051c8 21 }
4180_1 0:18d7c2b051c8 22 for(i=0; i<4000; i++) {
4180_1 0:18d7c2b051c8 23 buffer_SRAM_Bank1[i]= -i;
4180_1 0:18d7c2b051c8 24 }
4180_1 0:18d7c2b051c8 25 for(i=0; i<3000; i++) {
4180_1 0:18d7c2b051c8 26 buffer_SRAM[i]= 0;
4180_1 0:18d7c2b051c8 27 }
4180_1 0:18d7c2b051c8 28 myled=0;
4180_1 0:18d7c2b051c8 29 for (i=0; i<4000; i++) {
4180_1 0:18d7c2b051c8 30 pc.printf("%d\n\r",buffer_SRAM_Bank0[i]);
4180_1 0:18d7c2b051c8 31 }
4180_1 0:18d7c2b051c8 32 for (i=0; i<4000; i++) {
4180_1 0:18d7c2b051c8 33 pc.printf("%d\n\r",buffer_SRAM_Bank1[i]);
4180_1 0:18d7c2b051c8 34 }
4180_1 0:18d7c2b051c8 35 for (i=0; i<3000; i++) {
4180_1 0:18d7c2b051c8 36 pc.printf("%d\n\r",buffer_SRAM[i]);
4180_1 0:18d7c2b051c8 37 }
4180_1 0:18d7c2b051c8 38 myled = 1;
4180_1 0:18d7c2b051c8 39 }
4180_1 0:18d7c2b051c8 40 }