嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
K9 a7 ?8 X+ U; Z, v% @. H" c
Void UPP_TASK(Void)
! h4 Y* p( o& S4 ?
{
7 |# @) S7 D4 N/ O! N" q
$ Q/ S) e% A% w9 e$ ?9 n3 {
int i,j,k,target_int_count=2;
* d0 S. l: S4 W- P! _3 S% c' Y9 y; H( w
char ch[2];
$ N# l* I( h0 H3 ?; [
. c/ k# G6 ^2 z$ y3 m( N
& }. N2 ?: L$ U, E0 O$ Q
9 w" E- E" j# }$ ]/ A/ ?7 S, E
upp_interrupt_count = 0;
5 ]5 L0 L; r# O& f% Y! d9 A8 j8 m0 I d
upp_error_count = 0;
- ?( w: W( `1 V* P. p
8 p. y M, ?; s- u3 ?3 a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' r$ j' x4 i m% R1 c+ |& L+ r
// Initialize data buffers
/ ~ f1 j# n4 ^- e& g* x
for (i = 0; i < upp_frame_size; i++)
) s. U1 d* _( J. Q- o7 m
{
0 {* v1 b3 U" Q3 z
upp_buffer_b
=i;
" _' j$ r: t3 x0 }6 c0 ~
upp_buffer_a
= 0xDEAD;
- F( `$ o. [ v% q
}
( G- k5 ~; P" {; C/ Q
, p0 {. S6 u9 E7 O' E" L
//for(i=0;i<1024;i++)
5 t/ I" M6 I/ w" o9 \0 d# ]
// temp
=0;
( |+ r% g% @0 Q& {$ v# ^
/ Q/ v8 s Z/ i/ r P' w# N
//UPPReset();
* h3 E( l6 a* G+ {5 M
/*启动UPP DMA传输*/
6 a& p+ r5 |8 N
UARTPuts("upp_prog_dma_i\n",-2);
/ e. j) y0 p) r. s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* k+ S4 w- l- F u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 g+ W0 z* N0 Y6 F5 z- Q3 H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ P& E# A/ N2 [- y
0 m' S. G' |1 G
UARTPuts("upp_prog_dma_i\n",-2);
4 M. s r! y2 O" p: q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, J) d0 H$ s6 p0 y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% G1 b0 v, D6 [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ {6 j6 B! V7 U4 ^0 L$ w
6 j% d2 a: _' G; S7 h
/*等待UPP传输完毕*/
/ k, B4 S) I/ G) l( c( g$ U& q' P0 X
//i=0;
0 K* W- j# a! O# X5 h
//j=0;
! q$ V2 v2 n5 U( x( a
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 `( ]" h- h d
{
3 X) N' \+ G5 h, S" D
/* 测试UPP传输的同时操作普通DDR数据
% K8 Q, J- I+ P
temp
=i;
( }" ^4 V2 h! K
i++;
: X6 ~' v7 _. Z: K1 _
if(i==1024)
: ]8 ~5 | r' _4 c% p9 a ?) ^
{
, V; Q. D7 d2 Z6 Q. b
i=0;
: r6 @) h: P0 U+ b; v
j++;
" |; H. Q3 l o
}
. o5 }+ o' n9 T" i m
*/
% {3 c" S8 j0 I( H# |6 u
( f4 b7 L9 J/ L, @% S6 o- C7 n5 ~! |) u
asm(" nop");
6 m/ j* ?6 @, l W7 `8 E+ ^
+ V/ W( |3 N( Z8 U* x; f/ f8 a
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 }6 K# x; _, @" M$ X+ B
}
* {0 E( H" A$ L* _' X, B
) V1 B6 l! S4 Z! J/ `
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& N2 K# B5 p$ T: O3 E( V U( Z
//UARTprintf( "i=%d\n",i);
6 s1 O! r% t h5 G. I% x u
//UARTprintf( "j=%d\n",j);
2 B7 p- Q3 Y% y- \. f9 C2 h
UARTPuts("Data mismatch in buffers.\n",-2);
0 l0 {& E! V- a! ]! W
if (upp_interrupt_count == 2 && upp_error_count == 0)
; n/ i T Q" z2 t4 Z
{
$ R% E5 G, l. U& z
for (i = 0; i<upp_frame_size; i++)
5 C/ q3 M# ^4 }4 L. R
{
+ h- ~) D: J1 b4 J
if (upp_buffer_a
!= upp_buffer_b
)
8 {2 y& G K1 r% n, [
{
/ f: R5 x% X6 E. _& ^7 a
upp_error_count++;
0 y7 d4 D, ^$ I: O* Q
}
$ m+ J+ E' P* ^5 j5 e8 P
}
) N. x+ w% X: r% z6 c; `
}
2 t. q- y6 _$ e3 x
: L- s) r3 h: _7 ?( ?
/* 报告通信结果*/
$ D/ y% E9 D! q* k4 i
if(upp_error_count != 0)
. C) e, }0 P$ P8 v, B2 b/ O/ f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% m: z1 v% [# R7 t: t% s
else
- t9 q. G4 W. P
UARTPuts("uPP transfers complete!\n",-2);
0 Z- g9 I1 c6 E3 _
- k2 R1 _6 V& C% |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; M! S& J( ~* ]2 e1 J/ J
UARTGets(ch,2);
4 q* t, ` m1 \3 n8 R* q
UARTPuts("\n", -2);
1 A W5 k1 e d3 w( t
( z& V! Q1 E o% [4 `
if(ch[0] == 'y')
0 v$ E! l ?8 F H
{
3 A k9 c- B3 X1 K: f
/*打印全部读到的数据*/
; w* A; P, M. p% @( V: ^1 [1 I
for(i=0; i<upp_frame_size; )
+ p3 s0 A- z* ~5 g3 _
{
3 ]4 g( @& E2 w5 \ V
for(j=0; j<5; j++)
& u9 A& c+ l1 C3 q
{
5 d2 U- W1 K2 G+ U' F7 g7 f4 g. x; J
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. T$ d K! `/ }7 I! I
i++;
$ V m( E I0 O; d G6 Z$ d( R5 J( ^
//if(i >= 4096)
9 k6 h- ]8 l# g+ X$ G# t. v) B
// break;
4 m: _0 L: U Q3 Y
0 P2 C2 y" {. b- A( K- p
}
9 m; w) [: H/ y9 d+ r7 a! L5 i
UARTPuts("\n",-2);
* ]! t0 N1 z8 {) h- Z
}
$ C8 T0 o! ]2 S8 a
}
* S7 R; X9 {: x- R
3 C& H7 ~' K6 ?* \% t
}
8 j: p9 [: K6 h
3 R- }+ K( u6 O+ a
5 y9 g# Y: x; y6 k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) t$ @- D/ w, H0 o K8 N% R! N
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ J1 U3 I; T c u7 A
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4