C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6535|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ X$ k4 X0 d  _$ G2 l+ Rmain文件:7 T6 J. w- r  Q1 d+ G
interrupt void interrupt4(void)  - e& b& j& }7 p# \1 I, {' r* u" C
{1 h; C' f* f0 G- ~3 ?$ G
  Uint32 sample;3 {, w  K0 x# B1 o% s. s

1 p, `1 ^, e1 L. I/ w1 b+ [& `  sample = input_sample(); // read L + R samples from ADC
; b$ t5 j0 M6 H+ L. u; q: k  output_sample(sample);   // write L + R samples to DAC 4 z8 n& n: a/ v7 \
  return;
, T8 M/ F( E( x& E( j# Q, ]0 {* A}, T9 }  N. D3 r( i5 T
* B9 V- S) e% T6 e* ^. E
int main( void ). u2 ]4 T# l; d# s
{
2 A, N. L7 s0 h3 m7 Q) h
$ b' V! A+ t$ q6 B* {# ?7 d    /* Initialize BSL */
. ?9 n2 r$ X+ f- V2 V# Q! y    EVMC6747_init( );. a! B$ `9 K+ L, I
        /* Call evmc6747_intr function */
* y  F3 Q6 \, P    aic3106_init( );# V7 {, N7 u. a
        while(1);$ ?3 J' w) y/ i" x! b  A, O
}- B! w! t2 K1 z8 \

' z. ~, ~( C  j& x1 s! g$ J1 I5 p
9 G5 v) H5 d2 g1 S, w- Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) |: F* p: b; d- A" N  ^6 `: t7 K/* Initialize MCASP1 */0 e2 F8 a9 g% B5 t
    mcasp = &MCASP_MODULE_1;
- T; f! z+ N4 Y  f' Y9 k    mcasp->regs->GBLCTL  = 0;       // Reset) O2 i8 ~- S3 |  c* b
    mcasp->regs->RGBLCTL = 0;       // Reset RX
! d2 u. K; R0 P+ Z4 a! s( a+ ]' M$ S    mcasp->regs->XGBLCTL = 0;       // Reset TX
, u: b" S* m" I' ^    mcasp->regs->PWRDEMU = 1;       // Free-running
! h2 W9 y! H  a5 R   // configure McASP0 receive registers
, Y! u% m1 E2 Q2 f    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. u2 l+ c: j9 \$ K' A7 A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ j2 R1 ^! ]2 B5 n& L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# p! F% e- u+ d
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( t  J  j8 R( |4 s  J7 a    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 c9 k) g6 k% v5 D    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 n5 `! {) a+ C    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 E# P9 Q8 ^9 K4 k5 h9 }
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. j4 o( p7 Q! i  ?, Z! W, ?5 o
6 `$ n" B0 M# m4 [# w    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, R5 ?, ?; S: v" E
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- z7 A) _) V1 n( \3 Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) P7 e# ]* ~! M; D& j3 r6 ?2 C$ o
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& a6 {- ]# ]% {3 _; V% N7 s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. n; k$ U1 w/ V& W% s
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 t; W& r0 C, @, W: e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 g6 V% o3 V5 i. r1 K# Q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 c) j/ Y; v8 O  ~# Z3 q/ D

% o" ~1 Q4 ]7 o' t( T    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 X7 @( B6 ~! L6 ]5 J3 i' J    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* u& y2 _6 L$ c# q' A2 L+ y    mcasp->regs->PFUNC      = 0;          // All MCASPs
# V% T  H2 [9 C$ v( P2 d* a5 G    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! `  P2 Y; G4 [* X' P4 @5 T) q+ q! F
    mcasp->regs->DITCTL     = 0x00000000; // Not used. c' {7 U  o  l3 M* R# U' ^) d% s  S) D5 y. L
    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ B# }, P) U! f' {
    mcasp->regs->AMUTE      = 0x00000000; // Not used" ~4 m  r( R6 b9 u! K  ~

' @0 B' E) Z1 [5 o/* Starting sections of the McASP*/
" g, Z0 f) W/ B0 L" X! G    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & p* F! e- J( n4 I) M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 b: E+ N, P/ O9 I' ~& I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 q" L* k, M2 A! ~: q! B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% D* N) ~. X) a# H# M
& u4 `, C- n4 i& W5 ?& ?1 V# x    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- X; q9 K0 {$ h2 M7 n$ _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% k3 S" R0 U0 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% \4 V3 j+ ^* k* P3 H, b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 ?# Q  X5 {; D% X" ^3 M
* Z6 n' ~6 z5 m% p( v
    mcasp->regs->XSTAT = 0x0000ffff; 9 S6 g, m% m8 Q
    mcasp->regs->RSTAT = 0x0000ffff; : A2 T& z9 W) D

( h4 |. H" U8 D, k% H. Z0 J* m5 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 N" @1 O3 t$ B* O0 S! v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. m' I6 l: z4 O. F2 D8 k. ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 l1 f  P; ~( D6 E9 J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% J5 c8 @% S# ?) Z" g' C% K1 h2 e# n! n( E  t( t* x
    /* Write a 0, so that no underrun occurs after releasing the state machine */
- P$ _1 ?; J1 c( V    mcasp->regs->XBUF5 = 0;. b/ @! @( A( v( d. M9 k
    mcasp->regs->RBUF0 = 0;1 b, a0 {; e7 p, j) U

9 z' F( p$ J9 N4 ?. n    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 r1 G: @4 Y  S1 L5 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 @' d9 O' L* j" A. u3 @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; z0 u$ o& F5 c' e0 {% c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ r5 m) P1 D$ U. x
* \0 `  C! ]6 O: N" Z) L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  d5 d% K( s* B# I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, c+ G  S4 o  r0 C- C3 x    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; Q- \* R: C' u$ f( U9 x/ Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) g, P- s2 D3 w: L

) K5 _' l3 |: {: K0 A: F    CSR = 0x0000;
0 g5 W. V+ `, t/ T. P, M# E* z1 F    INTC_INTMUX1 = 0x3d;
9 Q) Y% q* w+ K$ `    ISTP = (unsigned int)vectors;8 c$ ]5 ?7 F! u& V& n% p( Y" k
    ICR = 0xFFF0;  
  t4 `/ s! o8 o% o    IER |= 0x12;  
1 @( d) k, Z  c' k" R$ q4 y    CSR |= 0x01;  ) v/ p4 o1 ^9 l2 N0 ?

1 U/ F5 {9 i4 e; {; e& ?
# ~  C( m; M. \5 e$ [7 E6 _5 H- \
还有就是两个输入输出函数:
6 o* U' \. p, y" Ivoid output_sample(Int32 out_data)9 ], X  E3 ]3 D$ W+ i
{& f9 M5 J1 S/ T$ N/ l; K
  AIC31_data.uint = out_data;  3 M) u7 K4 F  r9 c/ A) r
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 K2 R3 m2 |/ `+ P; s
}2 S# P6 U7 I( _) k: N0 u2 A  J5 v* C

1 u  n( m3 n" ?8 `/ z( TInt32 input_sample(void)
2 x0 i$ S  m' r6 @& B- b/ i{  
1 v4 r; U, b! l7 G6 ]( e  AIC31_data.uint = MCASP1_RBUF0_32BIT;( m2 f" F; x& F6 t* L# b
  return (AIC31_data.uint);
8 j: h' ^: c4 A}! V) x+ f& g$ C1 H4 A5 h
  y8 L1 g+ }5 \* J3 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-10 22:08 , Processed in 0.041141 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表