Difference between revisions of "CPCAP"
From MILEDROPEDIA
(→Debugging) |
m |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | it is a Motorola's name of Power Manager chip ( | + | it is a Motorola's name of Power Manager chip ([[Texas_Instruments_TWL5030]] for our phones) |
− | + | = Block Diagram = | |
[[File:TPS65950_Block_Diagram.png]] | [[File:TPS65950_Block_Diagram.png]] | ||
− | + | = Debugging = | |
* HOWTO Use JTAG on TPS65950 [[File:JTAG_on_TPS65950.pdf]] | * HOWTO Use JTAG on TPS65950 [[File:JTAG_on_TPS65950.pdf]] | ||
− | + | = Code Samples = | |
− | <syntaxhighlight lang=" | + | <syntaxhighlight lang="c" line> |
− | + | uint16_t cpcap_regacc_read(uint16_t reg, uint16_t *buf, uint16_t mask) | |
− | + | { | |
− | + | treg = (reg << 19) >> 1; | |
− | + | spi_send_ORR(0, 0); | |
− | + | spi_read_write_2(0, 0, treg, buf); | |
− | + | spi_send_BIC(0, 0); | |
− | + | *buf &= mask; | |
− | + | return *buf; | |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | uint16_t cpcap_regacc_write(uint16_t reg, uint16_t data, uint16_t mask) | |
− | + | { | |
− | + | uint16_t buf = 0; | |
− | + | uint16_t treg; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | cpcap_regacc_read(reg, &buf, 65535); | |
− | + | buf &= ~mask; | |
− | + | __asm { UBFX.W treg, reg, #0, #0xD ; Unsigned Bit Field Extract } | |
− | + | treg = (treg << 18) | 0x80000000 | (uint16_t)(data & mask | (uint16_t)buf); | |
− | + | spi_send_ORR(0, 0); | |
− | + | spi_read_write_2(0, 0, treg, buf); | |
− | + | spi_send_BIC(0, 0); | |
− | + | return buf; | |
− | + | } | |
− | + | ||
− | + | void cpcap_init_chain() | |
− | + | { | |
− | + | cpcap_regacc_write(387, 25656, 0xFFFF); | |
− | + | cpcap_regacc_write(394, 40, 0xFFFF); | |
− | + | cpcap_regacc_write(12, 257, 0xFFFF); | |
− | + | cpcap_regacc_write(391, 1337, 0xFFFF); | |
− | + | cpcap_regacc_write(385, 513, 0xFFFF); | |
− | + | cpcap_regacc_write(386, 196, 0xFFFF); | |
− | + | cpcap_regacc_write(397, 19, 0xFFFF); | |
− | + | delay(1); | |
− | + | cpcap_regacc_write(411, 324, 0xFFFF); | |
− | + | cpcap_regacc_write(412, 41, 0xFFFF; | |
− | + | cpcap_regacc_write(413, 41, 0xFFFF); | |
− | + | cpcap_regacc_write(768, 4096, 0xFFFF); | |
− | + | cpcap_regacc_write(769, 16755, 0xFF7F); | |
− | + | cpcap_regacc_write(896, 4097, 0xFFFF); | |
− | + | cpcap_regacc_write(897, 49184, 0xFFFF); | |
− | + | cpcap_regacc_write(898, 15615, 0xFFFF); | |
− | + | cpcap_regacc_write(1024, 16383, 0xFFFF); | |
− | + | cpcap_regacc_write(7936, 21577, 0xFFFF); | |
− | + | cpcap_regacc_write(7970, 2720, 0xFFFF); | |
− | + | cpcap_regacc_write(7936, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(384, 56068, 0xFFFF); | |
− | + | } | |
− | + | ||
− | + | void cpcap_reset_chain() | |
− | + | { | |
− | + | cpcap_regacc_write(384, 56084, 0xFFFF); | |
− | + | cpcap_regacc_write(385, 513, 0xFFFF); | |
− | + | cpcap_regacc_write(386, 196, 0xFFFF); | |
− | + | cpcap_regacc_write(387, 25652, 0xFFFF); | |
− | + | cpcap_regacc_write(388, 15380, 0xFFFF); | |
− | + | cpcap_regacc_write(389, 25652, 0xFFFF); | |
− | + | cpcap_regacc_write(390, 15380, 0xFFFF); | |
− | + | cpcap_regacc_write(391, 1337, 0xFFFF); | |
− | + | cpcap_regacc_write(392, 18740, 0xFFFF); | |
− | + | cpcap_regacc_write(394, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(395, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(396, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(398, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(399, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(400, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(401, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(402, 0, 0xFFFF); | |
− | + | cpcap_regacc_write(403, 91, 0xFFFF); | |
− | + | cpcap_regacc_write(404, 0, 0xFFFF); | |
+ | cpcap_regacc_write(405, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(406, 41, 0xFFFF); | ||
+ | cpcap_regacc_write(407, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(408, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(409, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(410, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(411, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(412, 41, 0xFFFF); | ||
+ | cpcap_regacc_write(413, 41, 0xFFFF); | ||
+ | cpcap_regacc_write(512, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(1024, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(1025, 0, 0xFFFF); | ||
+ | cpcap_regacc_write(1026, 0, 0xFFFF); | ||
+ | } | ||
+ | |||
+ | void cpcap_init() | ||
+ | { | ||
+ | log_write("\r\n************* \r\n"); | ||
+ | log_write("CPCAP_init( ) \r\n"); | ||
+ | log_write("************* \r\n"); | ||
+ | spi_read_write_3(); | ||
+ | cpcap_check_ULPI_and_VBUS(); | ||
+ | cpcap_init_chain(); | ||
+ | memclr(*(0x8FB52188), 0x80); | ||
+ | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 07:05, 15 January 2012
it is a Motorola's name of Power Manager chip (Texas_Instruments_TWL5030 for our phones)
Block Diagram
Debugging
- HOWTO Use JTAG on TPS65950 File:JTAG on TPS65950.pdf
Code Samples
uint16_t cpcap_regacc_read(uint16_t reg, uint16_t *buf, uint16_t mask)
{
treg = (reg << 19) >> 1;
spi_send_ORR(0, 0);
spi_read_write_2(0, 0, treg, buf);
spi_send_BIC(0, 0);
*buf &= mask;
return *buf;
}
uint16_t cpcap_regacc_write(uint16_t reg, uint16_t data, uint16_t mask)
{
uint16_t buf = 0;
uint16_t treg;
cpcap_regacc_read(reg, &buf, 65535);
buf &= ~mask;
__asm { UBFX.W treg, reg, #0, #0xD ; Unsigned Bit Field Extract }
treg = (treg << 18) | 0x80000000 | (uint16_t)(data & mask | (uint16_t)buf);
spi_send_ORR(0, 0);
spi_read_write_2(0, 0, treg, buf);
spi_send_BIC(0, 0);
return buf;
}
void cpcap_init_chain()
{
cpcap_regacc_write(387, 25656, 0xFFFF);
cpcap_regacc_write(394, 40, 0xFFFF);
cpcap_regacc_write(12, 257, 0xFFFF);
cpcap_regacc_write(391, 1337, 0xFFFF);
cpcap_regacc_write(385, 513, 0xFFFF);
cpcap_regacc_write(386, 196, 0xFFFF);
cpcap_regacc_write(397, 19, 0xFFFF);
delay(1);
cpcap_regacc_write(411, 324, 0xFFFF);
cpcap_regacc_write(412, 41, 0xFFFF;
cpcap_regacc_write(413, 41, 0xFFFF);
cpcap_regacc_write(768, 4096, 0xFFFF);
cpcap_regacc_write(769, 16755, 0xFF7F);
cpcap_regacc_write(896, 4097, 0xFFFF);
cpcap_regacc_write(897, 49184, 0xFFFF);
cpcap_regacc_write(898, 15615, 0xFFFF);
cpcap_regacc_write(1024, 16383, 0xFFFF);
cpcap_regacc_write(7936, 21577, 0xFFFF);
cpcap_regacc_write(7970, 2720, 0xFFFF);
cpcap_regacc_write(7936, 0, 0xFFFF);
cpcap_regacc_write(384, 56068, 0xFFFF);
}
void cpcap_reset_chain()
{
cpcap_regacc_write(384, 56084, 0xFFFF);
cpcap_regacc_write(385, 513, 0xFFFF);
cpcap_regacc_write(386, 196, 0xFFFF);
cpcap_regacc_write(387, 25652, 0xFFFF);
cpcap_regacc_write(388, 15380, 0xFFFF);
cpcap_regacc_write(389, 25652, 0xFFFF);
cpcap_regacc_write(390, 15380, 0xFFFF);
cpcap_regacc_write(391, 1337, 0xFFFF);
cpcap_regacc_write(392, 18740, 0xFFFF);
cpcap_regacc_write(394, 0, 0xFFFF);
cpcap_regacc_write(395, 0, 0xFFFF);
cpcap_regacc_write(396, 0, 0xFFFF);
cpcap_regacc_write(398, 0, 0xFFFF);
cpcap_regacc_write(399, 0, 0xFFFF);
cpcap_regacc_write(400, 0, 0xFFFF);
cpcap_regacc_write(401, 0, 0xFFFF);
cpcap_regacc_write(402, 0, 0xFFFF);
cpcap_regacc_write(403, 91, 0xFFFF);
cpcap_regacc_write(404, 0, 0xFFFF);
cpcap_regacc_write(405, 0, 0xFFFF);
cpcap_regacc_write(406, 41, 0xFFFF);
cpcap_regacc_write(407, 0, 0xFFFF);
cpcap_regacc_write(408, 0, 0xFFFF);
cpcap_regacc_write(409, 0, 0xFFFF);
cpcap_regacc_write(410, 0, 0xFFFF);
cpcap_regacc_write(411, 0, 0xFFFF);
cpcap_regacc_write(412, 41, 0xFFFF);
cpcap_regacc_write(413, 41, 0xFFFF);
cpcap_regacc_write(512, 0, 0xFFFF);
cpcap_regacc_write(1024, 0, 0xFFFF);
cpcap_regacc_write(1025, 0, 0xFFFF);
cpcap_regacc_write(1026, 0, 0xFFFF);
}
void cpcap_init()
{
log_write("\r\n************* \r\n");
log_write("CPCAP_init( ) \r\n");
log_write("************* \r\n");
spi_read_write_3();
cpcap_check_ULPI_and_VBUS();
cpcap_init_chain();
memclr(*(0x8FB52188), 0x80);
}