嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! J" K1 ~9 ]* b/ G0 V9 e" q. P
Void UPP_TASK(Void)
/ j8 ~6 h! P- k% a9 H/ F2 x5 E
{
/ I% k8 a3 A3 r$ B
( j }2 G- L# m# \ p" @- v5 [
int i,j,k,target_int_count=2;
3 t5 P9 n( ]) a4 y: P
char ch[2];
+ J$ d" r5 V7 X3 `' C
+ N# t: n) Q U0 g, H
% P y2 [# Q' w7 M' J9 v
* C3 D2 r) w+ J( \
upp_interrupt_count = 0;
& O& X$ l- @: u" e* D6 b0 G& v) ]7 O
upp_error_count = 0;
* y2 \ v3 J. ? _( o, F
2 P* n' q8 d" z) @. J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 F" u6 m% k8 K4 T+ ^9 y
// Initialize data buffers
! K g* U, U% Z$ y4 A$ E
for (i = 0; i < upp_frame_size; i++)
& c1 h8 s4 I8 j7 N' E9 z
{
$ _" P. y3 c7 W. E
upp_buffer_b
=i;
6 e( g( j( Z6 S
upp_buffer_a
= 0xDEAD;
- Q4 K# ]6 J4 ~
}
9 |& q1 Q; @/ D( X; M" G' X2 i
& Q/ e# @6 W8 E7 s" S
//for(i=0;i<1024;i++)
4 r3 f- t8 Y) W9 j# o
// temp
=0;
5 v. x5 u% e5 D5 M2 O0 b# |
9 i1 K# f+ v% b8 C3 @
//UPPReset();
: e. E& j0 E! F; z+ j. }9 ^+ H
/*启动UPP DMA传输*/
" H0 Q- k, r$ o3 k
UARTPuts("upp_prog_dma_i\n",-2);
0 F! R( i7 D6 b5 E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 l d) O. Z- L' x6 E" p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 \* T6 h9 s$ u
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 I4 s; t/ |/ ^9 o o
3 E1 N+ A2 O8 {6 Q8 S( B* r9 T. x# Y
UARTPuts("upp_prog_dma_i\n",-2);
( _; N4 @ y* H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 E J. J$ h9 M# l( D+ o
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& c/ p" W7 F$ j# v* V# I* f9 D6 ]" D P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 k0 P$ X% ]5 u9 K$ Y# R
3 d" R1 R2 [6 T! |" r0 M7 g
/*等待UPP传输完毕*/
5 d% o3 l6 ?0 [+ X* m
//i=0;
+ k0 G3 B- A5 ~6 m$ g! c) w5 N' N, F
//j=0;
7 c/ }5 ]4 j, \; o! y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 k, q, b2 o8 B% ~
{
9 ?+ I9 w: ~9 x1 j7 r+ n" g' w
/* 测试UPP传输的同时操作普通DDR数据
4 x! T1 q6 O! N2 i& m
temp
=i;
9 H4 R( m3 {5 \* ]/ q6 m( ^1 K
i++;
2 M5 h) r1 ^# P/ _! |0 E, B4 _
if(i==1024)
7 B6 y1 T- b ^2 {
{
% n& S6 f: a1 G- ^1 L: c# z
i=0;
, Q/ L( u3 |: r4 O4 ^; g. k+ x
j++;
6 j7 B. ?( Z, o% D5 l9 Z
}
+ h, x! _0 s Z0 e1 D8 X* f% o% H
*/
: ~; i1 B3 t1 N. T# c
" ]6 C3 J0 T7 j$ @; X9 [- c
asm(" nop");
! @' ~% K; q5 c) {- @
7 d( o, s% Y$ _3 B$ j6 d; T# ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 V% K6 d' i, ]* m! h
}
z: ]' A; e' _# [: H4 E/ D8 e
' b( n5 O1 D- }4 d" S, i: r1 n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
u3 A4 T4 u* o& V
//UARTprintf( "i=%d\n",i);
" B6 Q! [* n2 I! _. Y/ F0 _
//UARTprintf( "j=%d\n",j);
& N4 ?# b P3 C; I \: v( k! z
UARTPuts("Data mismatch in buffers.\n",-2);
9 U7 i0 [8 _3 g# _' h, u# T, l! t1 t
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ c$ i' Z6 V; V0 k
{
' M) N8 C- g2 n P5 P" h! i1 Y
for (i = 0; i<upp_frame_size; i++)
! G9 j3 \. V' s! c9 k
{
+ ^9 ^7 N6 C1 |# B& ?
if (upp_buffer_a
!= upp_buffer_b
)
7 Z! m% P0 C: N2 X6 e
{
; N, V3 y2 o, y# `3 M1 V2 P3 d; m
upp_error_count++;
1 }* I: \" J2 H7 s& S6 T {
}
2 N7 t, E7 ^# X6 ?" |% `6 z
}
! x% G. F/ x# _- W* u1 L, x- r
}
7 C5 e, R0 d( c. s5 b$ y3 ~3 V
+ s5 Y& [! E) P j( {+ d: J/ Z
/* 报告通信结果*/
/ _$ C5 J& w0 h C- w g) u) ]
if(upp_error_count != 0)
- x. \: z g" V% B q: j
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) T- H X1 n: t$ S n$ p! _% @+ N
else
* U9 U! u7 Z0 V# U/ c; [& }
UARTPuts("uPP transfers complete!\n",-2);
$ y2 M+ n4 j# k' O% D
8 ?; M6 k" h" R1 i" g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! i* q7 C& p' {( w7 M2 Z
UARTGets(ch,2);
, ~4 d9 k6 T; N
UARTPuts("\n", -2);
4 D, [! S! u r1 K
1 C' r9 o4 Q/ Y0 y6 \5 r! u, _# Q
if(ch[0] == 'y')
6 F: U$ B0 |+ m3 r) C# {. M
{
) H. `2 [4 |1 F. q
/*打印全部读到的数据*/
! K4 h: p; X& R1 [! Q
for(i=0; i<upp_frame_size; )
- _3 ^, |7 C, m2 _ K& M5 l* l* ~, p& R7 `
{
$ s k) O& G p
for(j=0; j<5; j++)
8 q0 _: J) h% w" S2 U" M9 c0 L
{
. ]) q8 ^7 |+ T. L2 R( N9 _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 m/ ~5 g3 v5 c) p! L7 O, k
i++;
. C o# W# d3 n; I8 w, l! S
//if(i >= 4096)
( u* q; e# `% m6 I+ R! ]& q
// break;
2 `2 g4 B# G1 p g) }
7 h* w- |$ \. k
}
# Q. A' G: D+ `- b6 d3 d; N( s9 x
UARTPuts("\n",-2);
" P! p$ |/ ~1 Q" @( g7 \: M
}
0 L8 y; y( L2 o& Q4 e
}
+ K7 s# J0 U7 E( y
* M" D% w" c! X$ r2 a
}
+ m5 N0 v1 x# ~: n3 r
& C$ F5 M5 }$ @ q
' ?/ Z b9 b7 {$ H* X, [
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! G/ s# O3 f5 Z& m. h! z' r m5 ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. [/ L; ~9 Q& M% Z% B
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4