1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use super::*;
use crate::flash::*;

pub fn nRF51822() -> TargetInfo {
    TargetInfo {
        flash_algorithm: FlashAlgorithm {
            load_address: 0x20000000,
            instructions: &[
                0xE00ABE00, 0x062D780D, 0x24084068, 0xD3000040, 0x1E644058, 0x1C49D1FA, 0x2A001E52, 0x4770D1F2,
                0x47702000, 0x47702000, 0x4c26b570, 0x60602002, 0x60e02001, 0x68284d24, 0xd00207c0, 0x60602000,
                0xf000bd70, 0xe7f6f82c, 0x4c1eb570, 0x60612102, 0x4288491e, 0x2001d302, 0xe0006160, 0x4d1a60a0,
                0xf81df000, 0x07c06828, 0x2000d0fa, 0xbd706060, 0x4605b5f8, 0x4813088e, 0x46142101, 0x4f126041,
                0xc501cc01, 0x07c06838, 0x1e76d006, 0x480dd1f8, 0x60412100, 0xbdf84608, 0xf801f000, 0x480ce7f2,
                0x06006840, 0xd00b0e00, 0x6849490a, 0xd0072900, 0x4a0a4909, 0xd00007c3, 0x1d09600a, 0xd1f90840,
                0x00004770, 0x4001e500, 0x4001e400, 0x10001000, 0x40010400, 0x40010500, 0x40010600, 0x6e524635,
                0x00000000,
            ],
            pc_init: Some(0x20000021),
            pc_uninit: None,
            pc_program_page: 0x20000071,
            pc_erase_sector: 0x20000049,
            pc_erase_all: Some(0x20000029),
            static_base: 0x20000170,
            begin_stack: 0x20001000,
            begin_data: 0x20002000,
            page_buffers: &[0x20002000, 0x20002400],
            min_program_length: Some(4),
            analyzer_supported: true,
            analyzer_address: 0x20003000,
        },
        basic_register_addresses: BasicRegisterAddresses {
            R0, R1, R2, R3, R9, PC, LR, SP,
        },
        memory_map: vec![
            MemoryRegion::Flash(FlashRegion {
                range: 0..0x40000,
                is_boot_memory: true,
                is_testable: true,
                blocksize: 0x400,
                sector_size: 0x400,
                page_size: 0x400,
                phrase_size: 0x400,
                erase_all_weight: ERASE_ALL_WEIGHT,
                erase_sector_weight: ERASE_SECTOR_WEIGHT,
                program_page_weight: PROGRAM_PAGE_WEIGHT,
                erased_byte_value: 0xFF,
                access: Access::RX,
                are_erased_sectors_readable: true,
            }),
            MemoryRegion::Flash(FlashRegion {
                range: 0x10001000..0x10001000 + 0x100,
                is_boot_memory: false,
                is_testable: false,
                blocksize: 0x100,
                sector_size: 0x100,
                page_size: 0x100,
                phrase_size: 0x100,
                erase_all_weight: ERASE_ALL_WEIGHT,
                erase_sector_weight: ERASE_SECTOR_WEIGHT,
                program_page_weight: PROGRAM_PAGE_WEIGHT,
                erased_byte_value: 0xFF,
                access: Access::RX,
                are_erased_sectors_readable: true,
            }),
            MemoryRegion::Ram(RamRegion {
                range: 0x20000000..0x20000000 + 0x4000,
                is_boot_memory: false,
                is_testable: true,
            }),
        ],
    }
}