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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: N* u+ f  C5 @1 K8 {
main文件:
6 D& |8 Z1 C( finterrupt void interrupt4(void)  9 I5 x: w8 N) }* L* _
{
4 J- n$ Q% j# F; k! P  Uint32 sample;' e# ^: u8 l9 I( }; S
  b" V$ O+ R, t9 A3 b
  sample = input_sample(); // read L + R samples from ADC, n9 ~& q/ i# W/ _% {- t4 s% w
  output_sample(sample);   // write L + R samples to DAC % V& y. G$ G* N3 W
  return;8 H: o& w, K$ E; u
}3 |/ P% U; p& ], M) I1 w

1 M4 t! t, M1 M5 U8 Dint main( void )
* l% M. [0 y/ @- B+ a" y- I" S{
. A3 D4 I  V8 k* }  K, _, J" {! b1 e
    /* Initialize BSL */
4 u# ?& f' e  Y' x; B& Z- b    EVMC6747_init( );+ w6 Z( u$ |- m* T, F
        /* Call evmc6747_intr function */
2 D  ^" Q4 J7 d0 \/ f: J    aic3106_init( );" [8 i0 W' _/ Z& A8 Z4 v! E6 F
        while(1);4 F" O, Z. D. N. h0 f3 o8 F
}/ i% s3 c5 c2 ]7 O4 Y) ?

- C6 f2 r9 y4 {7 M" o
( A9 x. e; K" qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 T. v, P4 l1 Z, s0 z: c/* Initialize MCASP1 *// j6 v( J( |: b- G' z
    mcasp = &MCASP_MODULE_1;, ^* V' w+ c6 \' h* }% \
    mcasp->regs->GBLCTL  = 0;       // Reset
6 A) ]7 Z2 j2 h0 R$ l5 n$ K( Y    mcasp->regs->RGBLCTL = 0;       // Reset RX  @- A$ |4 Z! a/ L$ @7 f- Y, L% @4 P
    mcasp->regs->XGBLCTL = 0;       // Reset TX
* B; g! T; `" F, d# z* w    mcasp->regs->PWRDEMU = 1;       // Free-running
2 o* N8 ]( E8 G( c7 Z   // configure McASP0 receive registers# l$ k5 T$ b& M4 D- e- x6 g
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% {. i* Z2 {+ j; `5 N3 y/ V1 d" g
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 U4 e+ l3 d1 a$ H+ n; p+ z+ E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; Z$ {+ _: g% P2 Z4 D: n6 V5 K, w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& ?' n/ d6 T+ m: ~6 M0 ~. ~
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& D. g+ M, q5 b! i& v0 W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 n- k4 F( M$ Y! p7 z    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 H% H$ `* Z8 k) Z) i
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% O( M4 D  J6 v2 R' j; |* c
( |$ G! `8 w9 S
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used& F4 Y1 R6 O6 C" L3 b2 Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 S( _" f2 O% a& B' W
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ G$ f3 s. m8 ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 J" Z3 i! v1 u# t% |3 q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- k* U* d  j6 y+ H+ R2 u
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 ^3 o! i8 D5 b
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 M0 [1 l3 M+ g; g) Y  x9 x5 z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  L; E( u& s/ a* l% K5 k1 ?) E$ c5 C8 X
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 l% b$ n- N% J    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 @# c( O3 R# L& f- i9 t
    mcasp->regs->PFUNC      = 0;          // All MCASPs* k7 `$ F3 Z- x7 v6 f1 ~( m8 P
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. V1 _7 a3 S, I0 O. b1 Y/ \4 y) [& V  V4 W6 R+ c1 K
    mcasp->regs->DITCTL     = 0x00000000; // Not used/ \' f# Y. @, A! r! E* p
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ E1 c- ?2 r8 ]6 y! ~$ B8 l    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ w5 b  _/ X4 T# [3 _
2 D3 f1 f( b6 ]3 C% g+ o6 B0 g/* Starting sections of the McASP*/
. H3 Q5 H+ G1 ]% E    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: K* N; P! k. ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 y8 S" N2 e* R% {# a
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 r. j4 s; c3 }- A4 \6 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) s* X8 e$ }+ {
( }) x+ D& S& g) }
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * S" b. v# G* }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 F( H5 [$ H. i6 ]0 P  n! [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + ]2 `9 w1 T; j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' P  t4 e5 {. |
( M6 y. h1 T( G    mcasp->regs->XSTAT = 0x0000ffff; 1 U* J' `" T( {* H9 b
    mcasp->regs->RSTAT = 0x0000ffff; ' o2 @1 P- U9 S8 b$ c

9 ?. |% m* V5 C) ?: I0 \3 l4 Z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; Z$ h% |% I* L: G2 \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: u8 d9 ]: }" `3 p+ ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ U) X1 ^# J3 n  Z1 r: z1 w% y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 P+ T3 z& v; m4 q& r& f6 I  ?4 w" E" m
    /* Write a 0, so that no underrun occurs after releasing the state machine */) Q7 ?. h6 ^0 [5 L
    mcasp->regs->XBUF5 = 0;! ?8 }: H; P: q. H
    mcasp->regs->RBUF0 = 0;2 z: Z' k# G8 s% s- s: {, _* ^

9 F  v; E5 V: t& r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! h2 z4 Q4 e# V. x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ m6 C& @7 \. s+ h; O7 p  P
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) F. f% m0 }9 G6 _: w( Y, v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 q; K5 C& z0 `$ q- J$ F0 b; w0 f) ^
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# E1 Q$ Z4 C5 q9 r6 i7 Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( C/ V& j, |7 s    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # S$ b1 g2 g& b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 |, H  ?% R; m: o/ h5 Y3 R
! c1 W. X1 K% R/ V! ^8 t8 ~' h/ E
    CSR = 0x0000;. E; Y3 X% B  G- c; C3 p
    INTC_INTMUX1 = 0x3d;
2 N7 }8 L9 i& G6 g/ R    ISTP = (unsigned int)vectors;1 `  F  p2 q/ H, Z
    ICR = 0xFFF0;  # y  W! M7 k* c  ?# H( I
    IER |= 0x12;  # ~- B+ D" P1 [
    CSR |= 0x01;  / Q& r+ {5 z# s0 e

; y8 X) _: n6 G9 V( E" l! g! Y  ^* W2 U. N2 [: y* X# `$ ?

3 |. K4 `+ j) p8 l% H3 e还有就是两个输入输出函数:
9 O' n5 x6 m6 M" }0 k: a7 X+ vvoid output_sample(Int32 out_data)6 `  w! w9 `$ O8 q
{
6 d' b! W4 R5 ?* K$ V) @7 u  AIC31_data.uint = out_data;  
* b. _, ^1 {1 b, N' ^& e  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 Y; r- A/ z0 _7 c- f: j3 H$ ^5 s}8 \. J. l7 M2 W0 |
; |7 c; E0 F: K0 |* _
Int32 input_sample(void): T% h* ]4 U) z" t! U* ~3 a
{  
1 W) S6 }% b; n& j" T  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- y% {2 q$ I0 K+ n* L$ R  return (AIC31_data.uint);
( E$ j4 I! N  g. W7 @$ j}4 B" l) w! q2 ]7 l- \" R

( G. g' L4 W" @/ U5 l3 Q7 F
分享到:  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-2-12 08:26 , Processed in 0.039864 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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