嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) A; ~" e* s5 i+ _2 S- I
Void UPP_TASK(Void)
0 V" X+ t: h- m6 }: y
{
" ^* O0 I/ M- c2 h) R
1 O( t$ z1 G* Y q Y: q: d. r7 Y$ c
int i,j,k,target_int_count=2;
4 {0 K8 Y, V/ `; k1 ^9 [/ m' J4 k
char ch[2];
% |3 B+ d! U7 X2 K/ V
; n' l1 |* u6 h Z
, E7 j& Y# m. i2 o# h4 {
% I5 q$ G, q4 p+ C
upp_interrupt_count = 0;
9 E: p/ q: U. b6 K6 l
upp_error_count = 0;
' W' u& h- \/ e& P1 o
* c, Y! T# ^2 l8 L
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. v; a: H. D) x+ J: [
// Initialize data buffers
. V5 H5 z( B, E* k$ p
for (i = 0; i < upp_frame_size; i++)
/ f- u& F* {% l0 L6 J" R
{
2 {% v. w; ~8 Y+ a9 W4 w8 f& v
upp_buffer_b
=i;
# N' l9 c, i2 K0 z! i+ ]: j Z
upp_buffer_a
= 0xDEAD;
# x* ?$ H& m ?6 `& ~
}
9 u6 X1 N2 U6 @
7 X' r; ^6 X! @5 I, L$ i
//for(i=0;i<1024;i++)
: B! \3 W h* I" z N4 W3 m& F
// temp
=0;
" |7 {: R _( f. {
( l! o- ?; _3 h- ]9 O
//UPPReset();
6 D5 k) }! v& _+ B+ A6 J. A
/*启动UPP DMA传输*/
: S& G& H: \* m- s5 d5 R' ]
UARTPuts("upp_prog_dma_i\n",-2);
4 D6 p& f( t: f8 P' E- U2 K2 Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" p5 a' Y" E1 r0 v: A0 h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) x! R+ A# F! { A" W
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' C' p9 y, o. k' @) I$ a
6 {: k4 k5 p' a: {
UARTPuts("upp_prog_dma_i\n",-2);
* m( A j9 {7 H+ U. o. m# Z! U
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 d) X8 {* O1 V4 S- M# X4 k+ R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ t4 F3 I: j8 q( @/ t
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" m m" t& `! r, M. [" ?: j9 t
2 S7 g' I: r8 X6 f$ n" {
/*等待UPP传输完毕*/
8 ?2 V) K$ E2 H( c; x* ^
//i=0;
/ m; w& L6 p- x* T2 G; P8 v
//j=0;
) ?6 S2 n3 e* V6 y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 n' i9 M* [0 o# H
{
- t+ x/ E" G6 r0 l9 i( ]& w9 Z
/* 测试UPP传输的同时操作普通DDR数据
5 ?# M% _0 ?+ {+ c, W* o* \0 i
temp
=i;
2 _- w7 H! \. K2 p, ]) {
i++;
3 {+ x; D1 g( K; `2 k: a2 d
if(i==1024)
0 h7 i+ Q, [) P% j# K# r! |( O! Q
{
# g. A+ q+ d% l& K& O7 a, Y
i=0;
3 e0 a/ `$ {: K& z6 G
j++;
& c' B, u0 J; Z
}
2 E& S7 q# W% O3 w; A
*/
3 A) j$ E Z/ v! H# N* m6 b
3 n+ A% \- I/ Y& L% i2 x" Y/ ]
asm(" nop");
9 J& ]" D% f, h
3 c4 L- U; n- l/ {, r3 d* P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 c2 P9 L$ S2 V v5 h5 H
}
# h e+ t4 i7 \- D
( p+ W6 b7 N7 A+ Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* V, B. f- ~ ]+ c% S( c
//UARTprintf( "i=%d\n",i);
! O7 y, j* h7 s2 W( T i' V
//UARTprintf( "j=%d\n",j);
( B6 B9 E) W7 ]
UARTPuts("Data mismatch in buffers.\n",-2);
4 @3 I+ u2 ?6 E' j9 g0 F
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 N9 Q6 e3 y0 U+ P5 L
{
0 s' W/ E5 P! B+ q
for (i = 0; i<upp_frame_size; i++)
; y8 z. d% R1 \
{
0 d0 |, E" Q- O% @0 D% J$ n
if (upp_buffer_a
!= upp_buffer_b
)
9 {$ c& T: c, W& q
{
# y! q# S% |9 J2 g% W
upp_error_count++;
9 h& s% V& l( S: `0 M9 w4 w1 N
}
9 ?4 ]: z8 H$ W( Z3 G0 D: C
}
% Q+ @! r1 `; x6 [3 ~! I2 u* L& _$ {, Q
}
3 x" W* ^6 c# H* h& g! N
; x. F8 J0 K5 M$ x7 F) N' t
/* 报告通信结果*/
. ?* z: U% M4 v* e, e
if(upp_error_count != 0)
8 ?% b; ]0 P$ c2 ^0 `- P) X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 T/ ?, ^0 T' }- x& h/ f
else
' A, B) Z) P* M Q( m% s# a
UARTPuts("uPP transfers complete!\n",-2);
* Z3 T2 f( _1 e7 Y! I
9 Q0 S5 E! ^- s1 C& D8 _* v) B" z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 L4 k. t0 N0 @0 T' o' k* f T
UARTGets(ch,2);
: R) H$ h- L- C. u' R
UARTPuts("\n", -2);
8 ~' h: X% H5 o; ^: t
* s r+ X% W& I2 R7 b5 g
if(ch[0] == 'y')
! L$ F: T2 ~+ f" ]' J
{
9 e8 j; E6 E! | D
/*打印全部读到的数据*/
( J- s9 k. ~/ x& q2 K
for(i=0; i<upp_frame_size; )
, L! l' {6 A) k0 A( R& L" B0 S
{
5 c1 O4 @/ _9 q- G$ y; Z
for(j=0; j<5; j++)
% D Y% F( x: O6 S. h$ y% \- k$ }
{
) \; H+ {9 l$ V! m w: i6 y5 E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 |4 H: Q/ B2 V
i++;
$ B9 X6 d! H9 E
//if(i >= 4096)
; P( h! ?9 w+ O' P% U
// break;
/ Z* ~7 G/ S9 Q7 `6 w' R
5 c5 `. x! M. S) J
}
8 c- e" r. U2 R! V# S# r% }
UARTPuts("\n",-2);
% ^; {# u2 a: k4 j+ t6 X
}
- E6 d; m, l, `
}
) @ B# r! s1 m
9 h, d8 q8 h) z% N
}
5 O8 k% d7 G+ U
6 C' B( \. d5 c
! J6 j, `& P( t3 Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. {+ |5 w. R# M, C* E2 S
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 S1 c7 ?* \% b4 n& T4 K+ r
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4