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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 U$ Q1 n8 t" X$ }( t7 @3 `) a- b2 Zmain文件:: f) i! S; {0 s' A) e. d
interrupt void interrupt4(void)  
- u& m* h! n, I& C, o; S{* h$ W. m  g  T% ^2 Z
  Uint32 sample;
% t2 R" E" ~8 @% t1 I
: [9 S& D' ^9 l  sample = input_sample(); // read L + R samples from ADC
, W7 c" q% o9 `) U  output_sample(sample);   // write L + R samples to DAC
/ I4 Z0 h( [' C; y$ i9 q1 W) j: `- t  return;
" U" B! D" C; ?+ U. a) Q' }( s}
* v' v0 ~1 }; `3 F
% {5 r6 @6 ~& z4 e/ e: Z4 Uint main( void )' l7 f& ^& R2 {) ^
{
! [. \5 D0 K3 _7 [
: O6 d- `! n5 ]5 h  n7 T    /* Initialize BSL */
2 ?4 `2 d3 a3 w* W6 e: W    EVMC6747_init( );
5 u, t, {: c! a. o8 F        /* Call evmc6747_intr function */
& B0 }9 _2 X9 U2 J    aic3106_init( );
, R/ G) ^, `# ^        while(1);
+ W8 f0 q2 S' O  e9 v. ]0 u}
: {- D& D' o; u8 F; i, [9 r. K: V$ i/ s0 X9 p5 x5 j7 S8 d

1 D$ W  N( j: O" }# daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 f  \. C: d! D+ c; w" R' S
/* Initialize MCASP1 */
5 Y: p4 {: ]% P) }& b    mcasp = &MCASP_MODULE_1;
% @( O0 D# }( F" L1 x    mcasp->regs->GBLCTL  = 0;       // Reset
! F, x$ B: {$ S- r    mcasp->regs->RGBLCTL = 0;       // Reset RX. F3 Q2 Y6 x: {7 r" g! U
    mcasp->regs->XGBLCTL = 0;       // Reset TX8 ]4 t7 m# o. s  v$ @+ S
    mcasp->regs->PWRDEMU = 1;       // Free-running
" x; B) m! T  j' M) W5 C   // configure McASP0 receive registers
" D1 y1 w8 Y  w# N& |8 j" l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 [) d/ m6 x1 E5 N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, l6 x4 p+ L( J; B
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. v  D5 b) I% k  V
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 d7 M4 N2 C8 J    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 d; ]- g; i7 F- X8 F. c' o    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- |# b* l$ A0 t1 e; t/ ]. M1 V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used3 p1 Q+ d% Y! `! x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 P, r: r7 J. X# o, i( q* a5 a+ p- t4 ?' m/ v
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" {* x2 W, |. G3 N9 n
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 ]( i, o7 l  N1 e    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; j7 m8 N; u3 l3 j+ ~! F    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 A$ j6 E2 x; s' R' }# [    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' R$ q& M- Y- N. a/ V
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' M3 P$ k" L1 @# t7 R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( x' P1 b! R  q  @# R
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# E, O! s: e( w9 Y) H  h$ o5 B* o) Y% u" c/ `, K7 p, i# ~) d( V/ t+ W5 x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 S& o8 l+ ^- k. h- A$ D
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 ?  E% E* `0 Q- x6 t    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 X# N4 w7 L7 n+ a0 S. f1 r    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 g7 j, I" N/ s$ Y2 ^: c4 ?! m
* e$ A6 a1 E4 B
    mcasp->regs->DITCTL     = 0x00000000; // Not used2 n/ P4 C1 W, z6 @+ m0 _
    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 K9 v, o5 I/ T" X  j! f6 w  G
    mcasp->regs->AMUTE      = 0x00000000; // Not used  o- L# A8 b) {4 [3 _
7 w0 N0 M9 x* Y. E
/* Starting sections of the McASP*/
. ^- B2 Q0 G5 P2 R" T: W" z  m    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- ]/ K& G* w1 s9 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 U# m' |* U" E2 i    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 y9 l( H$ r; D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  g2 S, a' f" q

6 O' n$ E8 r& N( c+ l+ L    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , C9 F3 l' ^5 N& B( G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' X' j0 d7 i! l+ N/ w6 }/ H5 J, T
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # [$ E6 X  f. V& V) o4 n- `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ `, r! G2 t7 ~2 y" U
( }/ J# J1 B$ e- B& n: Z
    mcasp->regs->XSTAT = 0x0000ffff; , ^! D' _* F$ U0 K1 ~
    mcasp->regs->RSTAT = 0x0000ffff;
  l% I2 F* Y4 N8 N0 V& i8 Q0 V2 Y0 f8 i4 m% E* [% z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 ]$ R7 I6 {+ Y* N9 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 d. l% T8 b% \* g( I0 F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; s8 I  j1 t" P3 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! a6 X4 }; S4 k  d# s$ v2 d6 g/ b
    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 r& V$ f! \: k. d, y    mcasp->regs->XBUF5 = 0;
, d; e6 N& P! a4 R    mcasp->regs->RBUF0 = 0;
$ D6 `/ n, Z: M, z4 R& g% o" Q; G7 u1 I' D: M2 Z. B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- {+ S. h9 g( w% \+ ]  l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' P  ~5 {% ~! q8 }" X/ P    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ p( j! O+ o9 z$ b/ H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 x) u( r! s2 B: @* X. ~* h' l
. H) I, F: h( g# H    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   y; f1 Y& b7 ]8 x5 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 a3 p4 w$ M7 b9 V
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # {  E5 }# S6 F; }' T3 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( c5 d  ^( ~: `( Z
( g( l) m& E* n6 V4 |% J5 R1 s% h    CSR = 0x0000;+ u6 u+ l$ q8 {1 h7 |
    INTC_INTMUX1 = 0x3d;4 E( U/ n5 @3 z
    ISTP = (unsigned int)vectors;$ F8 L' c! K$ _0 B9 r6 ~  G! {
    ICR = 0xFFF0;  . T" `/ A  h' a) H6 W
    IER |= 0x12;  
; X, S6 q$ |" B; B8 j$ m    CSR |= 0x01;  
% u! `6 u, b0 G) a7 T* p9 H+ h  D0 k5 ~; M2 G! [6 T

% {( M5 B& K% k; l/ h# w' f/ [. [% i! S
还有就是两个输入输出函数:
2 E, E6 b; N1 ?. S+ x$ m: Wvoid output_sample(Int32 out_data)) K) ]6 R8 a, i0 w7 F5 G% ]7 X
{
1 C0 \% t$ h3 |1 O* m3 W8 y8 {& ?  AIC31_data.uint = out_data;  - Q# `0 e( o' \9 ]
  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 O6 M9 U4 }" b
}
9 {" p/ Y9 |5 B9 ]
7 p: n8 {; _$ L# a5 V' [! ]Int32 input_sample(void)8 o' n" ?" o' u9 _4 ^9 p: l
{  8 x, p9 B$ m0 U( g3 [$ L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) ~( Z& O3 b# B" ]' ?  return (AIC31_data.uint);
" D- U  I, d/ N" p/ z( D1 `0 C, a2 Z}
& `, @' _  Y( U, [- S3 e( z9 v0 z2 ^2 o0 I
分享到:  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-4-6 03:00 , Processed in 0.041408 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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