00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef _FLASHC_H_
00049 #define _FLASHC_H_
00050
00051 #include <avr32/io.h>
00052 #include <stddef.h>
00053 #include "compiler.h"
00054
00056 #define AVR32_FLASHC_REGIONS (AVR32_FLASHC_FLASH_SIZE /\
00057 (AVR32_FLASHC_PAGES_PR_REGION * AVR32_FLASHC_PAGE_SIZE))
00058
00059
00062
00063
00068 extern unsigned int flashc_get_flash_size(void);
00069
00074 extern unsigned int flashc_get_page_count(void);
00075
00080 extern unsigned int flashc_get_page_count_per_region(void);
00081
00091 extern unsigned int flashc_get_page_region(int page_number);
00092
00099 extern unsigned int flashc_get_region_first_page_number(unsigned int region);
00100
00102
00103
00106
00107
00112 extern unsigned int flashc_get_wait_state(void);
00113
00119 extern void flashc_set_wait_state(unsigned int wait_state);
00120
00125 extern Bool flashc_is_ready_int_enabled(void);
00126
00132 extern void flashc_enable_ready_int(Bool enable);
00133
00138 extern Bool flashc_is_lock_error_int_enabled(void);
00139
00145 extern void flashc_enable_lock_error_int(Bool enable);
00146
00151 extern Bool flashc_is_prog_error_int_enabled(void);
00152
00158 extern void flashc_enable_prog_error_int(Bool enable);
00159
00161
00162
00165
00166
00171 extern Bool flashc_is_ready(void);
00172
00177 extern void flashc_default_wait_until_ready(void);
00178
00183 extern void (*volatile flashc_wait_until_ready)(void);
00184
00191 extern Bool flashc_is_lock_error(void);
00192
00199 extern Bool flashc_is_programming_error(void);
00200
00202
00203
00206
00207
00212 extern unsigned int flashc_get_command(void);
00213
00218 extern unsigned int flashc_get_page_number(void);
00219
00239 extern void flashc_issue_command(unsigned int command, int page_number);
00240
00242
00243
00246
00247
00253 extern void flashc_no_operation(void);
00254
00271 extern void flashc_erase_all(void);
00272
00274
00275
00278
00279
00284 extern Bool flashc_is_security_bit_active(void);
00285
00291 extern void flashc_activate_security_bit(void);
00292
00297 extern unsigned int flashc_get_bootloader_protected_size(void);
00298
00313 extern unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size);
00314
00319 extern Bool flashc_is_external_privileged_fetch_locked(void);
00320
00330 extern void flashc_lock_external_privileged_fetch(Bool lock);
00331
00341 extern Bool flashc_is_page_region_locked(int page_number);
00342
00349 extern Bool flashc_is_region_locked(unsigned int region);
00350
00363 extern void flashc_lock_page_region(int page_number, Bool lock);
00364
00373 extern void flashc_lock_region(unsigned int region, Bool lock);
00374
00382 extern void flashc_lock_all_regions(Bool lock);
00383
00385
00386
00389
00390
00401 extern Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit);
00402
00416 extern U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width);
00417
00428 extern U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte);
00429
00438 extern U64 flashc_read_all_gp_fuses(void);
00439
00460 extern Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check);
00461
00485 extern Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check);
00486
00506 extern Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check);
00507
00526 extern Bool flashc_erase_all_gp_fuses(Bool check);
00527
00545 extern void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value);
00546
00567 extern void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value);
00568
00585 extern void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value);
00586
00602 extern void flashc_write_all_gp_fuses(U64 value);
00603
00620 extern void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value);
00621
00641 extern void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value);
00642
00658 extern void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value);
00659
00674 extern void flashc_set_all_gp_fuses(U64 value);
00675
00677
00678
00681
00682
00693 extern void flashc_clear_page_buffer(void);
00694
00701 extern Bool flashc_is_page_erased(void);
00702
00715 extern Bool flashc_quick_page_read(int page_number);
00716
00736 extern Bool flashc_erase_page(int page_number, Bool check);
00737
00753 extern Bool flashc_erase_all_pages(Bool check);
00754
00772 extern void flashc_write_page(int page_number);
00773
00781 extern Bool flashc_quick_user_page_read(void);
00782
00795 extern Bool flashc_erase_user_page(Bool check);
00796
00806 extern void flashc_write_user_page(void);
00807
00835 extern volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase);
00836
00864 extern volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase);
00865
00893 extern volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase);
00894
00922 extern volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase);
00923
00952 #define flashc_memset(dst, src, src_width, nbytes, erase) \
00953 TPASTE2(flashc_memset, src_width)((dst), (src), (nbytes), (erase))
00954
00985 extern volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase);
00986
00987 #if UC3C
00988
00994 void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz);
00995 #endif // UC3C device-specific implementation
00996
00998
00999
01000 #endif // _FLASHC_H_