1#![no_std]
4#![feature(adt_const_params)]
5#![allow(dead_code)]
6#![allow(incomplete_features)]
7#![allow(unused_imports)]
8#![allow(non_camel_case_types)]
9#![allow(non_snake_case)]
10
11use cc2538_pac as pac;
12use cortex_m::peripheral::DWT;
13use embedded_hal as hal;
14
15pub mod adc;
16pub mod crypto;
17pub mod delay;
18pub mod dma;
19pub mod gpio;
20pub mod i2c;
21pub mod ioc;
22pub mod radio;
23pub mod rng;
24pub mod serial;
25pub mod smwd;
26pub mod spi;
27pub mod sys_ctrl;
28pub mod time;
29pub mod timers;
30
31pub fn get_ieee_address(addr: &mut [u8]) {
33 const TI_ADDR: [u8; 3] = [0x00, 0x12, 0x4b];
34 const ADDR_LOCATION: u32 = 0x00280028;
35
36 if unsafe { core::ptr::read((ADDR_LOCATION + 3) as *const u32) as u8 } == TI_ADDR[0]
37 && unsafe { core::ptr::read((ADDR_LOCATION + 2) as *const u32) as u8 } == TI_ADDR[1]
38 && unsafe { core::ptr::read((ADDR_LOCATION + 1) as *const u32) as u8 } == TI_ADDR[2]
39 {
40 for i in 0..8 {
41 addr[8 - i - 1] = unsafe {
42 core::ptr::read(
43 (ADDR_LOCATION + if i < 4 { i + 4 } else { i - 4 } as u32) as *const u32,
44 )
45 } as u8;
46 }
47 } else {
48 for (i, b) in addr.iter_mut().enumerate() {
49 *b = unsafe { core::ptr::read((ADDR_LOCATION + 8 - 1 - i as u32) as *const u32) } as u8;
50 }
51 }
52}
53
54struct FlashCca {
55 _bootloader_backdoor_disable: u32,
56 _is_valid: u32,
57 _flash_start_addr: u32,
58 _padding: u32,
59}
60
61#[link_section = ".flash_cca"]
62#[used]
63#[no_mangle]
64static FLASH_CCA: FlashCca = FlashCca {
65 _bootloader_backdoor_disable: 0xF3FF_FFFF,
66 _is_valid: 0,
67 _flash_start_addr: 0x0020_0000,
68 _padding: 0xFFFF_FFFF,
69};