diff --git a/drivers/dv_display/dv_display.cpp b/drivers/dv_display/dv_display.cpp index d9ff9562..1550e21e 100644 --- a/drivers/dv_display/dv_display.cpp +++ b/drivers/dv_display/dv_display.cpp @@ -16,7 +16,7 @@ namespace pimoroni { gpio_init(VSYNC); gpio_set_dir(VSYNC, GPIO_IN); - swd_load_program(section_addresses, section_data, section_data_len, sizeof(section_addresses) / sizeof(section_addresses[0])); + swd_load_program(section_addresses, section_data, section_data_len, sizeof(section_addresses) / sizeof(section_addresses[0]), 0x20000001, 0x15004000, true); ram.init(); write_header(0); diff --git a/drivers/dv_display/pico-stick.h b/drivers/dv_display/pico-stick.h index f3119df5..01c789f9 100644 --- a/drivers/dv_display/pico-stick.h +++ b/drivers/dv_display/pico-stick.h @@ -13,9 +13,9 @@ const uint elf_data0[] = { 0x47884915, 0x47884915, 0xe7fdbe00, -0x20008400, -0x20008400, -0x20008d2c, +0x20008460, +0x20008460, +0x20008d8c, 0x20040000, 0x20040000, 0x20040978, @@ -24,26 +24,26 @@ const uint elf_data0[] = { 0x15000978, 0x00000000, 0x480a4770, -0xffc6f004, +0xffcef004, 0x00004700, 0x20000100, 0xe000ed08, 0xd0000000, -0x20008d30, -0x2003db00, -0x2000370d, +0x20008d90, +0x2003db60, +0x2000371d, 0x20000c01, -0x20003819, +0x20003829, 0x00005657, 0x50520006, 0x5360b3ab, -0x20008288, +0x200082f0, 0x50520006, 0x9da22254, -0x200082a0, +0x20008308, 0x7188ebf2, -0x200083dc, -0x200083f4, +0x20008444, +0x2000845c, 0x20000034, 0xe71aa390, 0x00000000, @@ -241,11 +241,11 @@ const uint elf_data0[] = { 0x4802b510, 0xffaef7ff, 0x46c0bd10, -0x2003d7a4, +0x2003d804, 0x4802b510, 0xf7ff300c, 0xbd10ffa5, -0x2003d7a4, +0x2003d804, 0x0001b5f8, 0x465746de, 0x4645464e, @@ -513,7 +513,7 @@ const uint elf_data0[] = { 0x22008f5f, 0xf385601a, 0x483e8810, -0xf80af003, +0xf812f003, 0x009222a0, 0xf3bf58a2, 0x60138f5f, @@ -575,7 +575,7 @@ const uint elf_data0[] = { 0x0000028e, 0xff1ffffd, 0x001f8539, -0x20008308, +0x20008370, 0x21a04b06, 0x23016858, 0xb5106882, @@ -583,7 +583,7 @@ const uint elf_data0[] = { 0x508b05c9, 0xfd60f7ff, 0x46c0bd10, -0x2003d790, +0x2003d7f0, 0x0000041c, 0x21a04b06, 0x23016818, @@ -592,7 +592,7 @@ const uint elf_data0[] = { 0x508b05c9, 0xfd4ef7ff, 0x46c0bd10, -0x2003d790, +0x2003d7f0, 0x0000040c, 0x7a0a680b, 0x600b3301, @@ -657,14 +657,14 @@ const uint elf_data0[] = { 0x430ab22d, 0xb2714650, 0xf0009500, -0x0033fe8d, +0x0033fe95, 0x34073601, 0x429fb2f6, 0xb002d1e0, 0x4690bc1c, 0x46a24699, 0x46c0bdf0, -0x20008eec, +0x20008f4c, 0x000cb570, 0x28d30015, 0x29d2d82b, @@ -672,7 +672,7 @@ const uint elf_data0[] = { 0x4b264a25, 0x2cd350d1, 0x4823d902, -0xfe86f000, +0xfe8ef000, 0xd9122cf2, 0x22322333, 0x5caa5ceb, @@ -697,23 +697,23 @@ const uint elf_data0[] = { 0x2b015d2b, 0x2b02d00b, 0x480ed1f0, -0xfa8ef005, +0xfa96f005, 0xf004480d, -0x2100fa81, +0x2100fa89, 0x00080003, 0x480b4798, -0xfa84f005, +0xfa8cf005, 0x490a2200, 0xf003480a, -0x5d2bf837, +0x5d2bf83f, 0x46c0e7e9, -0x20008eec, +0x20008f4c, 0x0003488c, 0x00000994, 0x000348a0, -0x20007dcc, +0x20007ddc, 0x00004255, -0x20007dc0, +0x20007dd0, 0x15004000, 0x20000001, 0x061222d0, @@ -723,12 +723,12 @@ const uint elf_data0[] = { 0x20c87203, 0x000c698b, 0x6ac94358, -0xfaa6f004, +0xfaaef004, 0x68627428, 0x46942064, 0x6a616823, 0x43584463, -0xfa9cf004, +0xfaa4f004, 0x68e27468, 0x429368a3, 0x0013d200, @@ -743,7 +743,7 @@ const uint elf_data0[] = { 0x0013d200, 0xbd70762b, 0x0004b510, -0xfc5cf001, +0xfc64f001, 0xf7ff0021, 0xbd10ffc5, 0x4d10b570, @@ -754,7 +754,7 @@ const uint elf_data0[] = { 0x4465469c, 0x210a59ab, 0xf0046a98, -0x7720fa69, +0x7720fa71, 0x77600a00, 0x6a9a59ab, 0x429a4b08, @@ -763,83 +763,87 @@ const uint elf_data0[] = { 0x3319425b, 0xbd7077a3, 0xe7fb2318, -0x2003d75c, +0x2003d7bc, 0xfffcb790, 0x000006c4, 0x000493df, 0x0005cc5f, 0xb085b5f0, -0xfa76f005, -0x00284d32, -0xfcb2f000, -0x48324b31, -0xf005602b, -0x4f31f9f5, -0x00394e31, -0xf0010030, -0x0004fbcb, -0xffbef7ff, -0x5ce32339, -0xd1042b00, -0xbf202239, -0x2b005ca3, -0xf001d0fb, -0xf001fbff, -0x4b28fc09, -0x68197f82, -0x2a1a1c13, -0x231ad91a, -0x3b0b22f0, -0x011bb2db, -0x4013404b, -0x200a4a22, -0xf0026013, -0x4b21fa5d, -0x58ebaa02, -0x6a9ca901, -0x0020ab03, -0xfc2ef001, -0xd1082800, -0x481c0021, -0xfdcaf002, -0x2a14b2d2, -0x2314d2e2, -0x9a03e7e0, -0x98019902, -0xfbe2f001, -0xfa2af005, -0xf0004815, -0x0039f9a7, -0xf0010030, -0x4813fb87, -0xf9a8f005, +0xfa7ef005, +0xfc22f001, +0x00204c33, +0xfcb8f000, +0x48334b32, +0xf0056023, +0x4e32f9fb, +0x00314d32, 0xf0010028, -0x4811f845, +0x0007fbd1, +0xffbcf7ff, +0x5cfb2339, +0xd1042b00, +0xbf203339, +0x2a005cfa, +0x482bd0fb, +0xf9e6f005, +0xfc02f001, +0xfc0cf001, +0x7f824b28, +0x1c136819, +0xd91a2a1a, +0x22f0231a, +0xb2db3b0b, +0x404b011b, +0x4a234013, +0x6013200a, +0xfa60f002, +0xaa024b21, +0xa90158e3, +0xab036a9f, +0xf0010038, +0x2800fc31, +0x0039d108, +0xf002481c, +0xb2d2fdcd, +0xd2e22a14, +0xe7e02314, +0x99029a03, +0xf0019801, +0xf005fbe5, +0x4816fa2d, +0xf9aaf000, +0x00280031, +0xfb8af001, +0xf0054813, +0x0020f9ab, +0xf848f001, +0xf0054811, +0x4811f9a5, 0xf9a2f005, -0xf0054810, -0x4810f99f, -0xf992f004, -0x00032100, -0x47980008, -0x20008eec, +0x49102200, +0xf0024810, +0xe7feff55, +0x20008f4c, 0x20000b99, -0x20007de4, +0x20007df4, 0x20000a65, 0x200009ed, +0x20007e14, 0x40064000, 0x40065000, 0x000006c4, -0x20007e0c, -0x20008f94, -0x20007df0, -0x20007dfc, -0x20007dcc, -0x00004255, +0x20007e78, +0x20008ff4, +0x20007e28, +0x20007e44, +0x20007e60, +0x15004000, +0x20000001, 0x4902b510, 0xf0004802, 0xbd10fba3, 0x50300000, -0x20008eec, +0x20008f4c, 0x46d6b5f0, 0x4646464f, 0xb086b5c0, @@ -992,7 +996,7 @@ const uint elf_data0[] = { 0xf0062001, 0x61a8f84b, 0xbdf80028, -0x20007e58, +0x20007ec4, 0x2401b530, 0x00210005, 0x688089aa, @@ -1020,7 +1024,7 @@ const uint elf_data0[] = { 0x23f5d1fc, 0x6103061b, 0xbd30b005, -0x20007e60, +0x20007ecc, 0x2501b570, 0x00290004, 0x688089a2, @@ -1066,10 +1070,10 @@ const uint elf_data0[] = { 0xf7ff9400, 0xe7cffeab, 0x11a49a00, -0x20007e48, +0x20007eb4, 0x07bfa47f, -0x20007e50, -0x20007e40, +0x20007ebc, +0x20007eac, 0x2401b570, 0x00210005, 0x688089aa, @@ -1105,7 +1109,7 @@ const uint elf_data0[] = { 0xf7ff0028, 0xb002ff5b, 0x46c0bd70, -0x20007e58, +0x20007ec4, 0x46ceb5f0, 0xb5804647, 0x6943001f, @@ -1493,9 +1497,9 @@ const uint elf_data0[] = { 0x0003489c, 0x00034894, 0x00034898, -0x20007f00, -0x20007f20, -0x20007f50, +0x20007f6c, +0x20007f8c, +0x20007fbc, 0x000cb570, 0x2600a904, 0xa9055f8e, @@ -1565,7 +1569,7 @@ const uint elf_data0[] = { 0x68231904, 0xd02b2b00, 0x00310020, -0xfbc4f03e, +0xfbbcf03e, 0x37014653, 0x34086023, 0xd1f22f0a, @@ -1602,7 +1606,7 @@ const uint elf_data0[] = { 0x4b114699, 0x469844b1, 0xf7fe4648, -0x4640fc65, +0x4640fc5d, 0xfb7af004, 0xf0040038, 0xf004fed9, @@ -1617,7 +1621,7 @@ const uint elf_data0[] = { 0xe7ecfc5d, 0x000006c4, 0x00000984, -0x20007f74, +0x20007fe0, 0xf004b510, 0xf7fffc5d, 0x46c0ffc9, @@ -1883,7 +1887,7 @@ const uint elf_data0[] = { 0xf950f004, 0x250a4b57, 0xf7fe18e0, -0x2301fa55, +0x2301fa4d, 0x4b554699, 0x469a1d27, 0x00db23e0, @@ -1967,10 +1971,10 @@ const uint elf_data0[] = { 0x23e6d3f5, 0x00db79a2, 0xe77450e2, -0x20001949, -0x20007f80, +0x20001959, +0x20007fec, 0x00000984, -0x20007f90, +0x20007ffc, 0x00000998, 0x0000098c, 0x0003487c, @@ -2004,7 +2008,7 @@ const uint elf_data0[] = { 0xff3ef003, 0xe7f02001, 0x4f434950, -0x20007fac, +0x20008018, 0x8a03b510, 0x43596984, 0x311c0020, @@ -2285,8 +2289,8 @@ const uint elf_data0[] = { 0xb29b3b01, 0xe7a752a3, 0x50100900, -0x20008e68, -0x20008e64, +0x20008ec8, +0x20008ec4, 0xb5704b1a, 0x4c1a6019, 0x22e04b1a, @@ -2314,18 +2318,18 @@ const uint elf_data0[] = { 0xf0034a07, 0x0020ff67, 0x46c0bd70, -0x20008e64, +0x20008ec4, 0x50100900, -0x20008e68, -0x200084bc, +0x20008ec8, +0x2000851c, 0x00061a80, -0x2000225d, +0x2000226d, 0x4c04b510, 0xf0030020, 0x0020ff81, 0xffaef003, 0x46c0bd10, -0x200084bc, +0x2000851c, 0x47704800, 0x501009e0, 0xb083b5f0, @@ -2581,7 +2585,7 @@ const uint elf_data0[] = { 0xd9002b17, 0x70132310, 0x46c04770, -0x20008400, +0x20008460, 0x40832301, 0xd0042900, 0x60134a03, @@ -2720,15 +2724,15 @@ const uint elf_data0[] = { 0xd0000124, 0xe000ed00, 0x200001cd, -0x20008404, +0x20008464, 0xe000e100, 0xe000e180, 0xe000e280, -0x2003d7f4, +0x2003d854, 0xffffbd01, 0x0000aaaa, 0x0000bd01, -0x2000843e, +0x2000849e, 0xfffff000, 0xfffff800, 0xf3efb5f0, @@ -2770,10 +2774,10 @@ const uint elf_data0[] = { 0x2402e7f4, 0x46c0e7f2, 0xd0000124, -0x20008404, +0x20008464, 0x0000aaaa, 0xe000ed00, -0x2003d7f4, +0x2003d854, 0x200001cd, 0xffffbd01, 0x4a064b05, @@ -2825,9 +2829,9 @@ const uint elf_data0[] = { 0x00a40080, 0x50e56068, 0x46c0bd70, -0x20002d69, +0x20002d79, 0x34000040, -0x2003d7c4, +0x2003d824, 0x68194b0a, 0x8010f3ef, 0x680ab672, @@ -2839,7 +2843,7 @@ const uint elf_data0[] = { 0xbf408810, 0x21002000, 0x46c04770, -0x2003d7d8, +0x2003d838, 0x4657b5f8, 0x464e4645, 0xb5e046de, @@ -3010,7 +3014,7 @@ const uint elf_data0[] = { 0xdae92b00, 0x4b032201, 0xe7e54252, -0x2003d7c4, +0x2003d824, 0x0fffffff, 0x7fffffff, 0x4c0ab510, @@ -3024,9 +3028,9 @@ const uint elf_data0[] = { 0x00202103, 0xfe56f7ff, 0x46c0e7ef, -0x2000844c, -0x2003d7d8, -0x20002bb5, +0x200084ac, +0x2003d838, +0x20002bc5, 0x4645b5f0, 0x465746de, 0xb5e0464e, @@ -3132,9 +3136,9 @@ const uint elf_data0[] = { 0xbf208810, 0x2a00e7e5, 0xe7d1d0be, -0x20002c31, -0x2000844c, -0x2003d7d8, +0x20002c41, +0x200084ac, +0x2003d838, 0x40054000, 0x0004b570, 0xf000000d, @@ -3192,16 +3196,16 @@ const uint elf_data0[] = { 0xe7ed8810, 0xd0000128, 0x40054000, -0x2003d7f5, -0x2003d7dc, -0x20008e74, +0x2003d855, +0x2003d83c, +0x20008ed4, 0x40053fd0, 0x0001b510, 0x48034a02, 0xfa9af7ff, 0x46c0bd10, -0x20007fd8, -0x2003d7f2, +0x20008044, +0x2003d852, 0x6a594b03, 0x6a98000a, 0x428a6a59, @@ -3246,10 +3250,10 @@ const uint elf_data0[] = { 0xf7ff0020, 0xe7e5fad3, 0xd0000128, -0x20003139, +0x20003149, 0x40056038, -0x20008e74, -0x2003d7f5, +0x20008ed4, +0x2003d855, 0x464fb5f0, 0x464646d6, 0x0007b5c0, @@ -3304,8 +3308,8 @@ const uint elf_data0[] = { 0x46c0e7ec, 0x40054000, 0xd0000128, -0x2003d7f5, -0x2003d7dc, +0x2003d855, +0x2003d83c, 0xe000e280, 0xf3efb510, 0xb6728410, @@ -3322,7 +3326,7 @@ const uint elf_data0[] = { 0x46c0bd10, 0xd0000128, 0x40054000, -0x2003d7f5, +0x2003d855, 0x0005b570, 0x0014000e, 0xd0242900, @@ -3521,7 +3525,7 @@ const uint elf_data0[] = { 0x4000c000, 0x4000e000, 0x4000f000, -0x2003d7f8, +0x2003d858, 0x00000301, 0x4a294b28, 0x601ab570, @@ -3569,14 +3573,14 @@ const uint elf_data0[] = { 0x003c7ffe, 0x4000f000, 0x4000c000, -0x20008d18, -0x20008d28, +0x20008d78, +0x20008d88, 0x01ffffff, 0x4001f000, -0x20008d08, -0x20008d18, -0x20008d28, -0x20008d2c, +0x20008d68, +0x20008d78, +0x20008d88, +0x20008d8c, 0x00034a09, 0x28006810, 0x4908d005, @@ -3587,9 +3591,9 @@ const uint elf_data0[] = { 0x428b6010, 0x2001d9f7, 0xe7f54240, -0x2003d7a0, +0x2003d800, 0x20040000, -0x2003db00, +0x2003db60, 0xe7fdbe00, 0xb500b40f, 0xb0834808, @@ -3601,11 +3605,11 @@ const uint elf_data0[] = { 0xf0024803, 0xbe00fbe3, 0x46c0e7fd, -0x20007ffc, -0x2000800c, +0x20008068, +0x20008078, 0x4801b510, 0xffe4f7ff, -0x20008010, +0x2000807c, 0x46deb5f0, 0x4657464e, 0xb5e04645, @@ -3672,7 +3676,7 @@ const uint elf_data0[] = { 0xd0fc421a, 0x46c0e7bb, 0x40008000, -0x20008e84, +0x20008ee4, 0xb082b510, 0x429c9c04, 0x9400d804, @@ -3730,7 +3734,7 @@ const uint elf_data0[] = { 0x95002100, 0xf7ff2006, 0xe7afff09, -0x20008e84, +0x20008ee4, 0x02dc6c00, 0x0000b71b, 0x40008000, @@ -3744,7 +3748,7 @@ const uint elf_data0[] = { 0x07735940, 0x00804b01, 0x477058c0, -0x20008e84, +0x20008ee4, 0x0004b5f8, 0x0017200c, 0x000e001d, @@ -3798,7 +3802,7 @@ const uint elf_data0[] = { 0x4b046058, 0x4770601a, 0x00ffffff, -0x2003d7c0, +0x2003d820, 0x40058000, 0x4005a000, 0x4a022380, @@ -4611,11 +4615,11 @@ const uint elf_data0[] = { 0x7fefffff, 0x41cdcd65, 0xc1cdcd65, -0x20008218, +0x20008280, 0x3fe00000, -0x2000801c, -0x20008020, -0x2000802c, +0x20008088, +0x2000808c, +0x20008098, 0xd40007db, 0xe793e6d8, 0x2b009b23, @@ -4638,7 +4642,7 @@ const uint elf_data0[] = { 0x9b23e6db, 0x2b002420, 0xe6d6d1dc, -0x20008028, +0x20008094, 0x46deb5f0, 0x464e4657, 0xb5e04645, @@ -4849,11 +4853,11 @@ const uint elf_data0[] = { 0xd0002b00, 0x46d1e118, 0xe67f1c74, -0x2000487d, -0x2003d7bc, -0x20008034, -0x20008078, -0x200080c4, +0x2000488d, +0x2003d81c, +0x200080a0, +0x200080e4, +0x20008130, 0x431a2321, 0x93043b19, 0x93023308, @@ -5088,7 +5092,7 @@ const uint elf_data0[] = { 0xe72f002c, 0x4692220a, 0x46c0e6c5, -0x20003c0d, +0x20003c1d, 0xb085b500, 0x21019103, 0x93009002, @@ -5096,7 +5100,7 @@ const uint elf_data0[] = { 0xa902424a, 0xfc70f7ff, 0xbd00b005, -0x20004051, +0x20004061, 0x4a09b510, 0x68140003, 0x2c00b084, @@ -5107,15 +5111,15 @@ const uint elf_data0[] = { 0xbd10b004, 0xf81ef001, 0xe7f92000, -0x2003d7bc, -0x20004041, +0x2003d81c, +0x20004051, 0x21044801, 0x47184b01, -0x20008480, -0x20005011, +0x200084e0, +0x20005021, 0x689b4b01, 0x00004718, -0x20008480, +0x200084e0, 0xb5102314, 0x88180001, 0x881b3304, @@ -5448,11 +5452,11 @@ const uint elf_data0[] = { 0x685b4b1b, 0x930146fc, 0xdf04bd08, -0x20005777, +0x20005787, 0x4b17b418, 0x46fc681b, 0xbd089301, -0x5781df00, +0x5791df00, 0x46942000, 0x6f924a13, 0xd2090892, @@ -5460,7 +5464,7 @@ const uint elf_data0[] = { 0x68db4b0f, 0x930146fc, 0xdf0cbd08, -0x20005a39, +0x20005a49, 0xb5f04a0c, 0x6e556e14, 0x6f166f57, @@ -5472,8 +5476,8 @@ const uint elf_data0[] = { 0x689b4b03, 0x930146fc, 0xdf08bd08, -0x200058dd, -0x2003d7fc, +0x200058ed, +0x2003d85c, 0xd0000000, 0x4050b5ff, 0x40504042, @@ -5535,7 +5539,7 @@ const uint elf_data0[] = { 0x1b094903, 0x43190509, 0xbd104311, -0x2003d7d4, +0x2003d834, 0x0000041f, 0x004cb510, 0x23800d62, @@ -5558,9 +5562,9 @@ const uint elf_data0[] = { 0x4b04b418, 0x46fc6a5b, 0xbd089301, -0x5be9df24, +0x5bf9df24, 0x00002000, -0x2003d7fc, +0x2003d85c, 0xb5702313, 0x2c01781c, 0xdd10d015, @@ -5581,10 +5585,10 @@ const uint elf_data0[] = { 0x64aad1fc, 0x46c0e7eb, 0x00004453, -0x2003d7fc, +0x2003d85c, 0x0000334c, -0x2003d7d4, -0x20005745, +0x2003d834, +0x20005755, 0x4660b507, 0x0a0a8801, 0x2adf3002, @@ -5595,7 +5599,7 @@ const uint elf_data0[] = { 0x6800e000, 0x50504a01, 0xbd079003, -0x2003d7fc, +0x2003d85c, 0xbc03b40f, 0xb5f0bc0c, 0x07e42401, @@ -5913,7 +5917,7 @@ const uint elf_data0[] = { 0x41103220, 0x0018bd10, 0xbd100019, -0x20005c1b, +0x20005c2b, 0x0fcc0d0a, 0x051b1e53, 0x05521ac9, @@ -5963,10 +5967,10 @@ const uint elf_data0[] = { 0x622367e3, 0xe7e561e3, 0x00004653, -0x2003d8fc, +0x2003d95c, 0x0000334c, -0x2003d7d4, -0x20005d3d, +0x2003d834, +0x20005d4d, 0x4660b507, 0x0a0a8801, 0x2adf3002, @@ -5977,33 +5981,33 @@ const uint elf_data0[] = { 0x6800e000, 0x50504a01, 0xbd079003, -0x2003d8fc, +0x2003d95c, 0x0005b570, 0x4e0b000c, 0xf7fa0030, -0x0028fa77, +0x0028fa6f, 0xf0010021, 0x0005fb7f, 0xf7fa0030, -0x2d00fab7, +0x2d00faaf, 0x4b05d005, 0x429c192c, 0x0028d801, 0x4803bd70, 0xfd40f7fd, -0x20008d08, +0x20008d68, 0x20040000, -0x20008268, +0x200082d0, 0x21044801, 0x47184b01, -0x20008490, -0x20005011, +0x200084f0, +0x20005021, 0x681b4b01, 0x00004718, -0x20008490, +0x200084f0, 0x685b4b01, 0x00004718, -0x20008490, +0x200084f0, 0xb5100003, 0x681b0008, 0x47980011, @@ -6044,7 +6048,7 @@ const uint elf_data0[] = { 0x00116803, 0x47980028, 0x46c0e7e5, -0x200082c4, +0x2000832c, 0x4b0fb5f8, 0x681c0005, 0xd0152c00, @@ -6061,8 +6065,8 @@ const uint elf_data0[] = { 0xd1ef2c00, 0x602b2300, 0x46c0bdf8, -0x2003d798, -0x2003d79c, +0x2003d7f8, +0x2003d7fc, 0x000cb570, 0x00056809, 0xd0042980, @@ -6075,14 +6079,14 @@ const uint elf_data0[] = { 0xb0834d09, 0x0028061b, 0x681ca901, -0xf9def7fa, +0xf9d6f7fa, 0xd1072800, 0xb2649b01, 0xd003429c, 0xf7fa0028, -0x2001f9b1, +0x2001f9a9, 0xbd30b003, -0x20008d10, +0x20008d70, 0x464eb5f0, 0x465746de, 0xb5e04645, @@ -6132,12 +6136,12 @@ const uint elf_data0[] = { 0x703b0020, 0xe7e847c0, 0xf7fa4805, -0xe7d0f991, +0xe7d0f989, +0x20005df1, +0x2003d7f8, +0x2003d7fc, 0x20005de1, -0x2003d798, -0x2003d79c, -0x20005dd1, -0x20008d10, +0x20008d70, 0xb082b510, 0x0004466b, 0x1dd82200, @@ -6159,7 +6163,7 @@ const uint elf_data0[] = { 0xbd700028, 0x2c0068e4, 0xe7f9d1f3, -0x2003d798, +0x2003d7f8, 0x68134a0a, 0xd1052b00, 0x001ae00c, @@ -6171,7 +6175,7 @@ const uint elf_data0[] = { 0x477060c1, 0xd0fc2900, 0xe7fa6010, -0x2003d798, +0x2003d7f8, 0xb0a2b570, 0x0004000d, 0xff30f7ff, @@ -6194,11 +6198,11 @@ const uint elf_data0[] = { 0x2c0068e4, 0x2e00d1f0, 0x4804d0f7, -0xf914f7fa, +0xf90cf7fa, 0x46c0e7f3, -0x20005ebd, -0x2003d798, -0x20008d10, +0x20005ecd, +0x2003d7f8, +0x20008d70, 0xb500b40f, 0xa904b083, 0x9101c901, @@ -6224,9 +6228,9 @@ const uint elf_data0[] = { 0x42196993, 0x6017d1fc, 0x46c0e7f2, -0x2003d7ec, +0x2003d84c, 0xbffc8000, -0x2003d7f8, +0x2003d858, 0x0005b530, 0xdd122900, 0x24102000, @@ -6240,7 +6244,7 @@ const uint elf_data0[] = { 0x2800bd30, 0x2003d1fc, 0xe7f94240, -0x2003d7ec, +0x2003d84c, 0x001cb570, 0x00154b0a, 0xf7fd6018, @@ -6253,8 +6257,8 @@ const uint elf_data0[] = { 0x2101fa4d, 0xf7ff4802, 0xbd70ff47, -0x2003d7ec, -0x200084a0, +0x2003d84c, +0x20008500, 0xb51021e1, 0x22004b05, 0x4b05781b, @@ -6262,8 +6266,8 @@ const uint elf_data0[] = { 0x23010249, 0xffd8f7ff, 0x46c0bd10, -0x200083ec, -0x200083f0, +0x20008454, +0x20008458, 0x40034000, 0x46c0bd03, 0x0004b510, @@ -6329,9 +6333,9 @@ const uint elf_data0[] = { 0x46c0bd10, 0x20041e00, 0x20040978, -0x200061e9, +0x200061f9, 0xe000ed00, -0x200061e5, +0x200061f5, 0x4e11b570, 0x1b850004, 0x415d426b, @@ -6350,8 +6354,8 @@ const uint elf_data0[] = { 0xfa94f7fc, 0x4905bd70, 0x46c0e7f5, -0x200084bc, -0x2003d7a4, +0x2000851c, +0x2003d804, 0x00000664, 0x200003b9, 0x200003c9, @@ -6374,8 +6378,8 @@ const uint elf_data0[] = { 0xf8aaf000, 0x4905bd70, 0x46c0e7f1, -0x200084bc, -0x2003d7a4, +0x2000851c, +0x2003d804, 0x200003b9, 0x000008ff, 0x200003c9, @@ -6385,7 +6389,7 @@ const uint elf_data0[] = { 0x4b034398, 0x60183010, 0x46c04770, -0x200084b4, +0x20008514, 0x4000e000, 0x46deb5f8, 0x464e4657, @@ -6453,7 +6457,7 @@ const uint elf_data0[] = { 0x639563d5, 0xf7ff50d4, 0xbd70ff7d, -0x200084b4, +0x20008514, 0x4000e000, 0x4000f000, 0x4000c000, @@ -6573,7 +6577,7 @@ const uint elf_data0[] = { 0x0000040c, 0x50000414, 0x50001414, -0x2003d790, +0x2003d7f0, 0x20000901, 0x50000404, 0x50001404, @@ -6719,7 +6723,7 @@ const uint elf_data0[] = { 0x46994690, 0x46ab46a2, 0x46c0bdf0, -0x20008328, +0x20008390, 0x9fffffff, 0xafe00000, 0x680e0000, @@ -7026,7 +7030,7 @@ const uint elf_data0[] = { 0x4803e7a8, 0x60134043, 0xe7a3600b, -0x20008334, +0x2000839c, 0x000002ff, 0x464eb5f8, 0x46de4645, @@ -7111,8 +7115,8 @@ const uint elf_data0[] = { 0x686adccb, 0x4282e7e5, 0xe7d5dbb4, -0x2003d9fc, -0x2003dafc, +0x2003da5c, +0x2003db5c, 0x000ffc00, 0xb089b530, 0x466d0001, @@ -7138,18 +7142,18 @@ const uint elf_data0[] = { 0x1879632b, 0xd0192a00, 0x00300022, -0xfa52f039, +0xfa4af039, 0x08614b1d, 0x4b1d62eb, 0x00220089, 0x632b0030, 0xf0391879, -0x23c2fa47, +0x23c2fa3f, 0x62eb015b, 0x00224b18, 0x00300039, 0xf039632b, -0xbdf8fb7b, +0xbdf8fb73, 0x00300022, 0xfee8f000, 0x08614b10, @@ -7178,8 +7182,8 @@ const uint elf_data0[] = { 0x4803230b, 0xfbaaf7fb, 0xbd00b003, -0x20008344, -0x2003d7f0, +0x200083ac, +0x2003d850, 0x46ceb5f8, 0x23054647, 0x56cbb580, @@ -7215,8 +7219,8 @@ const uint elf_data0[] = { 0x4803bdf8, 0xfbb2f7fc, 0xafd00000, -0x20008e6c, -0x20008364, +0x20008ecc, +0x200083cc, 0xb5104b12, 0x4460469c, 0x41584243, @@ -7237,7 +7241,7 @@ const uint elf_data0[] = { 0xd1f94214, 0x46c0e7f0, 0xafd00000, -0x20008e6c, +0x20008ecc, 0xb5104b07, 0xd0044298, 0x48074a06, @@ -7247,9 +7251,9 @@ const uint elf_data0[] = { 0xfafef7fb, 0x46c0e7f8, 0x50300000, -0x2000839c, -0x2003d7f3, -0x20008378, +0x20008404, +0x2003d853, +0x200083e0, 0xb5104b0b, 0x4460469c, 0x41444244, @@ -7263,8 +7267,8 @@ const uint elf_data0[] = { 0x42402001, 0x46c0e7fa, 0xafd00000, -0x200083b8, -0x2003d7f3, +0x20008420, +0x2003d853, 0x000cb5f8, 0xf7fb0006, 0x2205fabb, @@ -7279,7 +7283,7 @@ const uint elf_data0[] = { 0xbdf80028, 0xf7fc4801, 0x46c0fb31, -0x20008364, +0x200083cc, 0x2501b570, 0x0004790b, 0x3d01409d, @@ -7292,7 +7296,7 @@ const uint elf_data0[] = { 0xf7fb505a, 0xbd70fa99, 0xafd00000, -0x20008e6c, +0x20008ecc, 0x46deb5f0, 0x464e4657, 0x468b4645, @@ -7460,7 +7464,7 @@ const uint elf_data0[] = { 0x00180001, 0xf804f000, 0x46c0bd10, -0x200084c8, +0x20008528, 0x4351b510, 0xf82af000, 0xd00e1e04, @@ -7704,10 +7708,10 @@ const uint elf_data0[] = { 0x60e160a2, 0x60d4608c, 0x46c0e6d5, -0x20008900, +0x20008960, 0x000001ff, -0x200088f8, -0x20008e30, +0x20008958, +0x20008e90, 0x0000100f, 0x00001008, 0xd9522814, @@ -7849,7 +7853,7 @@ const uint elf_data0[] = { 0x6823bd70, 0xd0fb2b00, 0xe7f9602b, -0x2003dafc, +0x2003db5c, 0x0783b510, 0x7803d027, 0xd0262b00, @@ -7911,11 +7915,11 @@ const uint elf_data0[] = { 0x60084905, 0x430b2101, 0xe7d56053, -0x20008900, +0x20008960, 0x00000fef, 0x00000fff, -0x20008e34, -0x200088f8, +0x20008e94, +0x20008958, 0x46d6b5f0, 0x4646464f, 0xb5c00005, @@ -8029,11 +8033,11 @@ const uint elf_data0[] = { 0x431ce794, 0x6003604c, 0x46c0e780, -0x20008900, -0x20008908, +0x20008960, +0x20008968, 0x000001ff, -0x200088fc, -0x20008e30, +0x2000895c, +0x20008e90, 0x00000554, 0x00000000, 0x4802b401, @@ -8057,16 +8061,39 @@ const uint elf_data0[] = { 0x55464420, 0x646f6d20, 0x00000065, -0x20535041, -0x74696e49, -0x00000000, -0x72617453, +0x44205644, +0x6c707369, +0x44207961, +0x65766972, +0x6e492072, +0x61697469, +0x6573696c, +0x00000064, +0x44205644, +0x65766972, +0x53203a72, +0x74726174, +0x00676e69, +0x44205644, +0x65766972, +0x43203a72, +0x6b636f6c, +0x6e6f6320, +0x75676966, +0x00646572, +0x44205644, +0x65766972, +0x44203a72, +0x6c707369, +0x66207961, +0x656c6961, +0x00000064, +0x44205644, +0x65766972, +0x52203a72, +0x74657365, 0x676e6974, 0x00000000, -0x70736944, -0x2079616c, -0x6c696166, -0x00006465, 0x74737953, 0x63206d65, 0x6b636f6c, @@ -8080,15 +8107,15 @@ const uint elf_data0[] = { 0x68636120, 0x65766569, 0x00000064, -0x20007e68, +0x20007ed4, 0x0000ff13, -0x20007e90, +0x20007efc, 0x0000ff15, -0x20007ebc, +0x20007f28, 0x0000ff14, -0x20007ee4, +0x20007f50, 0x0000ff06, -0x20007ef0, +0x20007f5c, 0x0000ff07, 0x6840e826, 0x6004e88f, @@ -8205,127 +8232,126 @@ const uint elf_data0[] = { 0x006e616e, 0x2d696e66, 0x00000000, -0x2000493e, -0x200048f4, -0x200048f4, -0x20004936, -0x200048f4, -0x200048f4, -0x200048f4, -0x200048f4, -0x200048f4, -0x200048f4, -0x200048f4, -0x2000492e, -0x200048f4, -0x20004926, -0x200048f4, -0x200048f4, -0x2000491e, -0x20004ab4, -0x20004956, -0x20004aa8, -0x20004956, +0x2000494e, +0x20004904, +0x20004904, 0x20004946, -0x20004956, -0x20004956, -0x20004956, -0x20004956, -0x20004956, -0x20004956, -0x20004956, -0x20004968, -0x20004956, -0x20004956, -0x20004956, -0x20004956, -0x20004956, -0x20004968, -0x20004af8, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x20004ca0, +0x20004904, +0x20004904, +0x20004904, +0x20004904, +0x20004904, +0x20004904, +0x20004904, +0x2000493e, +0x20004904, +0x20004936, +0x20004904, +0x20004904, +0x2000492e, 0x20004ac4, -0x20004ca0, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x20004a2a, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x20004a2a, -0x20004c06, -0x20004a2a, -0x20004ca0, -0x20004ac4, -0x20004ca0, -0x2000497c, -0x20004a2a, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x2000497c, -0x20004a2a, -0x20004bd8, -0x2000497c, -0x2000497c, -0x20004b0e, -0x2000497c, -0x20004a2a, -0x2000497c, -0x2000497c, -0x20004a2a, -0x00000000, +0x20004966, +0x20004ab8, +0x20004966, +0x20004956, +0x20004966, +0x20004966, +0x20004966, +0x20004966, +0x20004966, +0x20004966, +0x20004966, +0x20004978, +0x20004966, +0x20004966, +0x20004966, +0x20004966, +0x20004966, +0x20004978, +0x20004b08, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x20004cb0, +0x20004ad4, +0x20004cb0, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x20004a3a, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x20004a3a, +0x20004c16, +0x20004a3a, +0x20004cb0, +0x20004ad4, +0x20004cb0, +0x2000498c, +0x20004a3a, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x2000498c, +0x20004a3a, +0x20004be8, +0x2000498c, +0x2000498c, +0x20004b1e, +0x2000498c, +0x20004a3a, +0x2000498c, +0x2000498c, +0x20004a3a, 0x00000000, 0x3ff00000, 0x00000000, @@ -8365,10 +8391,10 @@ const uint elf_data0[] = { 0x00333230, 0x50520006, 0xb63cffbb, -0x20008298, +0x20008300, 0x50520006, 0x4275f0d3, -0x20008278, +0x200082e0, 0x00000a0d, 0x54524155, 0x64747320, @@ -8383,7 +8409,7 @@ const uint elf_data0[] = { 0x0074756f, 0x50520006, 0xa1f4b453, -0x200082e0, +0x20008348, 0x50520008, 0x00000092, 0x53444d54, @@ -8394,7 +8420,7 @@ const uint elf_data0[] = { 0x206e6920, 0x21515249, 0x00000000, -0x20008330, +0x20008398, 0x00000002, 0x68a170a1, 0x00fefefc, @@ -8440,13 +8466,13 @@ const uint elf_data0[] = { 0x616c6961, 0x00656c62, 0x20000098, -0x200082ac, +0x20008314, 0x2000008c, -0x200082b8, -0x200082f4, -0x20008300, +0x20008320, +0x2000835c, +0x20008368, }; -constexpr uint elf_data1_addr = 0x20008400; +constexpr uint elf_data1_addr = 0x20008460; const uint elf_data1[] = { 0x00000010, 0x00000000, @@ -8466,14 +8492,14 @@ const uint elf_data1[] = { 0x46704700, 0x49013809, 0xbd014788, -0x20002aad, -0x20008464, +0x20002abd, +0x200084c4, 0x00000000, -0x20008d30, -0x20008eac, +0x20008d90, +0x20008f0c, 0x00000000, 0x00000000, -0x20008ebc, +0x20008f1c, 0x00000000, 0x00000000, 0x00000010, @@ -8488,9 +8514,9 @@ const uint elf_data1[] = { 0x0000434d, 0x00003453, 0x00003443, -0x20006101, +0x20006111, 0x00000000, -0x2000614d, +0x2000615d, 0x00000000, 0x00000100, 0x40044000, @@ -8498,12 +8524,12 @@ const uint elf_data1[] = { 0x40048000, 0x00000000, 0x00000000, -0x200084d0, +0x20008530, 0x00000000, 0x00000000, -0x200087bc, -0x20008824, -0x2000888c, +0x2000881c, +0x20008884, +0x200088ec, 0x00000000, 0x00000000, 0x00000000, @@ -8770,30 +8796,6 @@ const uint elf_data1[] = { 0x00020000, 0x00000000, 0x00000000, -0x20008900, -0x20008900, -0x20008908, -0x20008908, -0x20008910, -0x20008910, -0x20008918, -0x20008918, -0x20008920, -0x20008920, -0x20008928, -0x20008928, -0x20008930, -0x20008930, -0x20008938, -0x20008938, -0x20008940, -0x20008940, -0x20008948, -0x20008948, -0x20008950, -0x20008950, -0x20008958, -0x20008958, 0x20008960, 0x20008960, 0x20008968, @@ -9026,15 +9028,39 @@ const uint elf_data1[] = { 0x20008cf0, 0x20008cf8, 0x20008cf8, +0x20008d00, +0x20008d00, +0x20008d08, +0x20008d08, +0x20008d10, +0x20008d10, +0x20008d18, +0x20008d18, +0x20008d20, +0x20008d20, +0x20008d28, +0x20008d28, +0x20008d30, +0x20008d30, +0x20008d38, +0x20008d38, +0x20008d40, +0x20008d40, +0x20008d48, +0x20008d48, +0x20008d50, +0x20008d50, +0x20008d58, +0x20008d58, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x20005da9, -0x20004fd5, -0x200056e5, -0x20005cd9, -0x20000d0d, +0x20005db9, +0x20004fe5, +0x200056f5, +0x20005ce9, +0x20000d1d, }; constexpr uint elf_data2_addr = 0x20040000; const uint elf_data2[] = { diff --git a/drivers/dv_display/swd_load.cpp b/drivers/dv_display/swd_load.cpp index 497beb8f..458a5d8d 100644 --- a/drivers/dv_display/swd_load.cpp +++ b/drivers/dv_display/swd_load.cpp @@ -87,7 +87,7 @@ static void idle() { pio_sm_put_blocking(pio0, pio_sm, 0); } -static bool connect(bool first = true) { +static bool connect(bool first = true, uint core = 0) { if (first) { pio_prog = &swd_raw_write_program; pio_offset = pio_add_program(pio0, &swd_raw_write_program); @@ -138,7 +138,7 @@ static bool connect(bool first = true) { wait_for_idle(); pio0_hw->irq = 1; pio_sm_put_blocking(pio0, pio_sm, 0x19); - pio_sm_put_blocking(pio0, pio_sm, 0x01002927); + pio_sm_put_blocking(pio0, pio_sm, 0x01002927 | (core << 28)); printf("Read ID\n"); uint id; @@ -148,7 +148,7 @@ static bool connect(bool first = true) { } printf("Received ID: %08x\n", id); - if (id != 0x0bc12477) return false; + if (core != 0xf && id != 0x0bc12477) return false; printf("Abort\n"); if (!write_cmd(0x01, 0x1E)) { @@ -179,13 +179,28 @@ static bool connect(bool first = true) { return false; } - printf("Setup memory access\n"); - if (!write_cmd(0x23, 0xA2000052)) { - printf("Memory access setup failed\n"); - return false; + if (core != 0xf) { + printf("Setup memory access\n"); + if (!write_cmd(0x23, 0xA2000052)) { + printf("Memory access setup failed\n"); + return false; + } + + printf("Halt CPU\n"); + if (!write_reg(0xe000edf0, 0xA05F0003)) { + printf("Halt failed\n"); + return false; + } + } + else { + if (!write_cmd(0x29, 0x00000001)) { + printf("Clear reset failed\n"); + return false; + } } idle(); + return true; } @@ -193,24 +208,23 @@ static bool load(uint address, const uint* data, uint len_in_bytes) { printf("Loading %d bytes at %08x\n", len_in_bytes, address); idle(); - printf("Halt CPU\n"); - if (!write_reg(0xe000edf0, 0xA05F0003)) { - printf("Halt failed\n"); - return false; - } - - idle(); - constexpr uint BLOCK_SIZE = 1024; - for (uint i = 0; i < len_in_bytes; i += BLOCK_SIZE) { - uint block_len_in_words = std::min(BLOCK_SIZE >> 2, (len_in_bytes - i) >> 2); + uint block_len_in_words = std::min((BLOCK_SIZE - (address & (BLOCK_SIZE - 1))) >> 2, len_in_bytes >> 2); + for (uint i = 0; i < len_in_bytes; ) { if (!write_block(address + i, &data[i >> 2], block_len_in_words)) { printf("Block write failed\n"); return false; } + i += block_len_in_words << 2; + block_len_in_words = std::min(BLOCK_SIZE >> 2, (len_in_bytes - i) >> 2); } - for (uint j = 0; j < len_in_bytes; j += 4) { +#ifdef FULL_VERIFY + for (uint j = 0; j < len_in_bytes; j += 4) +#else + uint j = 0; +#endif + { uint check_data; if (!read_reg(address + j, check_data)) { printf("Read failed\n"); @@ -227,18 +241,23 @@ static bool load(uint address, const uint* data, uint len_in_bytes) { return true; } -static bool start(uint pc = 0x20000001) { +static bool start(uint pc, uint sp) { idle(); + // Start from boot address, which can be read from ROM at 0x4 + uint rom_pc, rom_sp; + read_reg(0x0, rom_sp); + read_reg(0x4, rom_pc); + printf("Set PC\n"); - if (!write_reg(0xe000edf8, pc) || + if (!write_reg(0xe000edf8, rom_pc) || !write_reg(0xe000edf4, 0x1000F)) { printf("Failed to set PC\n"); return false; } printf("Set SP\n"); - if (!write_reg(0xe000edf8, 0x15004000) || //0x20042000) || + if (!write_reg(0xe000edf8, rom_sp) || !write_reg(0xe000edf4, 0x1000D)) { printf("Failed to set SP\n"); @@ -246,12 +265,21 @@ static bool start(uint pc = 0x20000001) { } idle(); -#if 1 + // If a PC has been given, go through watchdog boot sequence to start there + if (pc != 0) { + uint watchdog_data[4] = {0xb007c0d3, 0x4ff83f2d ^ pc, sp, pc}; + printf("Setup watchdog\n"); + if (!write_block(0x4005801c, watchdog_data, 4)) { + printf("Failed to setup watchdog for reset\n"); + } + } + +#if 0 uint data; write_reg(0xe000edf4, 0x0000F); idle(); read_reg(0xe000edf8, data); - printf("Set PC to %08x\n", data); + printf("PC is %08x\n", data); for (int i = 0; i < 16; ++i) { write_reg(0xe000edf4, i); @@ -265,7 +293,6 @@ static bool start(uint pc = 0x20000001) { printf("WD%d is %08x\n", i, data); } #endif - //write_reg(0x40010008, 0xC000); printf("Start CPU\n"); if (!write_reg(0xe000edf0, 0xA05F0001)) { @@ -275,12 +302,34 @@ static bool start(uint pc = 0x20000001) { idle(); wait_for_idle(); - //sleep_us(100); + +#if 0 + sleep_ms(10); + + connect(false); + printf("Halt CPU\n"); + if (!write_reg(0xe000edf0, 0xA05F0003)) { + printf("Halt failed\n"); + return false; + } + + for (int i = 0; i < 16; ++i) { + write_reg(0xe000edf4, i); + idle(); + read_reg(0xe000edf8, data); + printf("R%d is %08x\n", i, data); + } + + for (int i = 0; i < 4; ++i) { + read_reg(0x4005801c + 4*i, data); + printf("WD%d is %08x\n", i, data); + } +#endif return true; } -bool swd_load_program(const uint* addresses, const uint** data, const uint* data_len_in_bytes, uint num_sections) { +bool swd_load_program(const uint* addresses, const uint** data, const uint* data_len_in_bytes, uint num_sections, uint pc = 0x20000001, uint sp = 0x20042000, bool use_xip_as_ram = false) { gpio_init(2); gpio_init(3); gpio_disable_pulls(2); @@ -288,13 +337,27 @@ bool swd_load_program(const uint* addresses, const uint** data, const uint* data printf("Connecting\n"); - bool ok = connect(); - - printf("Connected %s\n", ok ? "OK" : "Fail"); + bool ok = connect(true, 0xf); + printf("Reset %s\n", ok ? "OK" : "Fail"); if (!ok) { return false; } + ok = connect(false, 0); + + printf("Connected core 0 %s\n", ok ? "OK" : "Fail"); + if (!ok) { + return false; + } + + if (use_xip_as_ram) { + printf("Disable XIP\n"); + if (!write_reg(0x14000000, 0)) { + printf("Disable XIP failed\n"); + return false; + } + } + for (uint i = 0; i < num_sections; ++i) { if (!load(addresses[i], data[i], data_len_in_bytes[i])) { @@ -303,7 +366,12 @@ bool swd_load_program(const uint* addresses, const uint** data, const uint* data } } - ok = start(); + ok = start(pc, sp); + + ok |= connect(false, 1); + + ok |= start(0, 0x20041000); + unload_pio(); return ok; } diff --git a/drivers/dv_display/swd_load.hpp b/drivers/dv_display/swd_load.hpp index 564ba3f1..75d0a81a 100644 --- a/drivers/dv_display/swd_load.hpp +++ b/drivers/dv_display/swd_load.hpp @@ -1 +1 @@ -bool swd_load_program(const uint* addresses, const uint** data, const uint* data_len_in_bytes, uint num_sections); \ No newline at end of file +bool swd_load_program(const uint* addresses, const uint** data, const uint* data_len_in_bytes, uint num_sections, uint pc = 0x20000001, uint sp = 0x20042000, bool use_xip_as_ram = false); \ No newline at end of file diff --git a/examples/dv_stick/dv_stick_test.cmake b/examples/dv_stick/dv_stick_test.cmake index caea1fd0..4214577e 100644 --- a/examples/dv_stick/dv_stick_test.cmake +++ b/examples/dv_stick/dv_stick_test.cmake @@ -6,7 +6,7 @@ add_executable( ) # Pull in pico libraries that we need -target_link_libraries(${OUTPUT_NAME} pico_stdlib dv_display hardware_i2c pico_graphics) +target_link_libraries(${OUTPUT_NAME} pico_stdlib dv_display hardware_i2c hardware_uart pico_graphics) pico_enable_stdio_usb(${OUTPUT_NAME} 1) diff --git a/examples/dv_stick/dv_stick_test.cpp b/examples/dv_stick/dv_stick_test.cpp index 6e8e4ce4..09fac16e 100644 --- a/examples/dv_stick/dv_stick_test.cpp +++ b/examples/dv_stick/dv_stick_test.cpp @@ -3,19 +3,37 @@ #include #include "hardware/gpio.h" +#include "hardware/uart.h" #include "drivers/dv_display/dv_display.hpp" #include "libraries/pico_graphics/pico_graphics.hpp" using namespace pimoroni; -#define FRAME_WIDTH 640 +#define FRAME_WIDTH 720 #define FRAME_HEIGHT 480 +void on_uart_rx() { + while (uart_is_readable(uart1)) { + uint8_t ch = uart_getc(uart1); + putc(ch, stdout); + } +} + int main() { - set_sys_clock_khz(200000, true); + set_sys_clock_khz(216000, true); stdio_init_all(); + // Relay UART RX from the display driver + gpio_set_function(5, GPIO_FUNC_UART); + uart_init(uart1, 115200); + uart_set_hw_flow(uart1, false, false); + uart_set_format(uart1, 8, 1, UART_PARITY_NONE); + uart_set_fifo_enabled(uart1, false); + irq_set_exclusive_handler(UART1_IRQ, on_uart_rx); + irq_set_enabled(UART1_IRQ, true); + uart_set_irq_enables(uart1, true, false); + constexpr uint BUTTON_A = 9; gpio_init(BUTTON_A); gpio_set_dir(BUTTON_A, GPIO_IN);